Jump to content


  • Content count

  • Donations

    30.00 CAD 
  • Joined

  • Last visited

  • Days Won


ikoon last won the day on April 17

ikoon had the most liked content!

Community Reputation

194 Excellent

About ikoon

  • Rank

Contact Methods

  • Website URL

Personal Information

  • Name
    Jiri Miratsky
  • Location
    Czech Republic

Recent Profile Visitors

3,274 profile views
  1. how get attributes name?

    Hi Jorb, there are four detail intrinsic, as in the attached image ... which store what you need. You can access these intrinsic attributes with python or VEX. With VEX, you can access them like this: s[]@pointattributes = detailintrinsic(0,"pointattributes");
  2. store getbbox into attribute

    Hi Matt, according to the docs, void getbbox(vector &min, vector &max) is deprecated. We should use three arguments, first is the geometry input (integer number or "op:" string reference). getbbox (0, v@min, v@max); This one line is also what you asked for. It stores the bounding box into two vector attributes.
  3. The snippet parm in the Wrangle is a String Parm, Multi-line String, and it has a tag named "editorlines". That tag is set to 8-30, so the maximum displayed lines is 30. It is a "factory" default, and that Attribute Wrangle HDA definition is in the Houdini installation directory. You could probably redefine that factory HDA (my terminology here is probably incorrect) by right clicking on the node and then "Type Properties..." and saving to another library, which will override the factory one. For me it is a thin ice, I don't want to do it Just for an illustration, I just I duplicated the Parm interface and set bigger "editorlines" in a spare parameter:
  4. convert absolute <-> relative

    This seems to work for converting simple expressions ... I have tried also the "getReferencedParm()" ... but this "brute force replace" seemed easier now. Still it is only a partial solution: def parm_relative_to_absolute_all(node) : for parm in node.parms() : parm_raw = parm.rawValue() try: path = re.findall('[\"\'](.*?)[\"\']',parm_raw)[0] path = path[:path.rindex('/')] path_abs = node.node(path).path() parm_raw_abs = parm_raw.replace(path,path_abs) parm.setExpression(parm_raw_abs, replace_expression=True) except: # probably it was not referenced pass
  5. Well, I am just a self taught freelancer, so I hope that mine settings are correct. BTW it is recommended to use $JOB instead of $HIP. @dzigakaiserI really think that the script, which replaces $HIP, is not necessary.
  6. Here is how I submit the job. Here is the HQueue Simulation: HQueue Render is similar. Btw sometimes I want only a subset of clients. For example I have the commercial Redshift license only on one client machine, PC-A:
  7. Here are the contents of my .ini files: C:\HQueueClient\hqnode.ini (on the client machines) [main] server = port = 5000 sharedNetwork.mount = \\\Q [job_environment] C:\HQueueServer\hqserver.ini (on the server machine) # # I did not paste whole file here on odforce, there are many lines before and after # [server:main] use = egg:Paste#http host = port = 5000 [app:main] # The shared network. hqserver.sharedNetwork.host = hqserver.sharedNetwork.path.linux = %(here)s/shared hqserver.sharedNetwork.path.windows = Q hqserver.sharedNetwork.path.macosx = %(here)s/HQShared hqserver.sharedNetwork.mount.linux = /mnt/hq hqserver.sharedNetwork.mount.windows = Q: hqserver.sharedNetwork.mount.macosx = /Volumes/HQShared # Server port number. hqserver.port = 5000 # # I did not paste whole file here on odforce, there are many lines before and after #
  8. Dziga thank you very much for your description. Mine issue was due to improper installation. After reinstalling it went fine. Here are some details: SESI recommends: Please use UNC paths with Hqueue, never letter drives. If you are still having problems after switching to UNC paths, please check if you can see the location on the windows file explorer. If yes, then the job failure is likely due to the HQueue Client not having access to that location. Check the HQueue Client service and verify that the service's Logon account is set to a Windows user account that has access to it. Personaly I have set it like this: - on the Server, I don't share a folder but whole Q:\ drive - on Clients, I map the Q:\ drive - so the $HQROOT paths are identical On the server I don't use UNC paths. Accessing directly Q: on the server (without UNC) is much faster. Here is described why: https://stackoverflow.com/questions/12903054/unc-path-pointing-to-local-directory-much-slower-than-local-access/12943869#12943869 It is not a solution for studios, but for me (Indie) I am really glad, that I have that extra speed. It is against the recommendation but so far it works fine. Here is the usual process I do, step by step. I am no guru, so I hope that everything is as it should be: Share Q: drive on the server machine: Map Q: drive on the client machines: Set firewalls on client and server machines: Set service login on client machines: Service login set, it looks like this: This is probably not necessary. If I remember correctly, I have read somewhere, that I should set local network addresses as an "intranet":
  9. convert absolute <-> relative

    Please, do you have any complete solution to convert from or to relative references? - sometimes I need to convert the expressions, e.g. chs("../name") or ch("../transform1/rx") or chs("/obj/geo1/name1/attribname") - sometimes it is just a node reference, e.g. object_merge this node: ../OUT_data1 - it could also be object_merge many nodes: /obj/geo/OUT_data2 /obj/geo/OUT_data3 /obj/geo/OUT_data4 I usually do it manually. But sometimes it would be useful to convert some (or all) references on the node with a script. E.g after creating the Reference copy (Ctrl+Alt+Shift drag).
  10. Hi Davide, for strings and arrays, you can use the array[start:stop:step] syntax: a[start:stop] // items start through stop-1 a[start:] // items start through the rest of the array a[:stop] // items from the beginning through stop-1 a[:] // a copy of the whole array For your case, this is the syntax: int coord = 6; // I changed the coord from 5 to 6 string s = "0123456789"; s@s_1 = s[:coord]; // "012345" s@s_5 = s[coord:]; // "6789" More examples and explanation here: https://stackoverflow.com/questions/509211/understanding-slice-notation a[-1] // last item in the array a[-2:] // last two items in the array a[:-2] // everything except the last two items //There is also the step value, which can be used with any of the above: a[start:stop:step] // start through not past stop, by step
  11. learning foreach loop in vex

    Hi @MadMax50, maybe this thread might help you too? We had similar talk: https://forums.odforce.net/topic/41982-vex-foreach-i-dont-get-it/ Towards the end, there are commented examples.
  12. There is more files here: C:\Program Files\Side Effects Software\Houdini 17.5.258\houdini\help\examples\nodes\dop Than here: https://www.sidefx.com/docs/houdini/examples/nodes/dop/index.html But I checked few files and I stumbled upon examples from both lists, that contain obsolete nodes :-/
  13. Hi char, btw did you go through the DOP Examples, which are shipped with Houdini? Some of them are obsolete. Now I loaded this one (GasTargetForce.hda), it uses abandoned method (Source Volume DOP, now we use the new Volume Source DOP). But as regards microsolver principles, implementations and inspiration, those examples should serve well: C:\Program Files\Side Effects Software\Houdini 17.5.258\houdini\help\examples\nodes\dop\gastargetforce\GasTargetForce.hda
  14. Hi char, I would also like to know more about these deep things, so I hope other users will also contribute. My know-how is unfortunately not enough to explain these things. But if you have time and mood to "dig", then the gasvortexconfinement is really nice combination of Gas Match Fields, Analysis (Curl then Length then Gradient, then Normalize) and then Gas Cross, Gas Combinations, Gas VOP. It "applies" calculated result to the vel. From the docs about gasvortexconfinement: The Gas Vortex Confinement DOP applies vortex confinement to a velocity field. This is a force which amplifies existing vortices with the intent of undoing the diffusion that occurs during the diffusion stages of the fluid solver. You can also look at videos from 3Blue1Brown or Khan Academy, so you know how these nodes together "find" and amplify the Vortex direction: https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/curl-grant-videos/v/2d-curl-intuition https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/curl-grant-videos/v/3d-curl-intuition-part-1
  15. Hi, the mentioned masterclass is probably this: https://vimeo.com/42988999 I also like this tutorial: https://vimeo.com/119694897 Matt Estela has great tutorials: http://www.tokeru.com/cgwiki/index.php?title=HoudiniDops# http://www.tokeru.com/cgwiki/index.php?title=Smoke_and_Pyro I don't know if there is any new video tutorial, which describes the low-level principles. I learn by digging into the "shelf" solutions https://forums.odforce.net/topic/41800-gas-analysis/?do=findComment&comment=199863 https://forums.odforce.net/topic/42101-how-do-pyro-collisions-work/?do=findComment&comment=201007 Btw, when I am digging, I use this script "Find all parms referencing this parm". http://lex.ikoon.cz/find-all-parms-referencing-this-parm/ Here is an attachment, microsolvers_dev.rar with lots of experiments, just for an inspiration. Unfortunately lots of it is outdated (it is from the year 2011) https://forums.odforce.net/topic/13748-learning-microsolvers/?do=findComment&comment=101666