Welcome to od|forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.


  • Content count

  • Joined

  • Last visited

  • Days Won


Everything posted by Juraj

  1. I also wrote a blog post describing my approach, feel free to check it here.
  2. Hello community, I am creating this thread where I will be posting links to my tests, experiments, RnD's and other uncategorizable stuff. Also often I will include scene files so feel free to explore them and to learn how not to do things ...hope it will help somebody, somehow. Juraj
  3. Hello, thanks! Glad you like it Unfortunately I cannot share scripts because of the university policy, but will try to write a new one save incremental function # splits versioning string into letter and number, e.g. v025 -> ['v','025'] def verSplit(ver): head = ver.rstrip('0123456789') tail = ver[len(head):] return head, tail # save incremental, tries to preserve version formatting def saveInc(): hipname = hou.getenv('HIPNAME') if hipname != 'untitled': v, num = verSplit( hipname.split("_")[-1] ) num = str( int(num) + 1 ).zfill( len(num) ) newName = hipname.split("_") newName[-1] = v + num newNameStr = hou.getenv('HIP') + "/" + "_".join(newName) + "." + hou.getenv('HIPFILE').split(".")[-1] hou.hipFile.save(newNameStr) else: print "cannot increment version name in untitled.hip" Hi, thanks Maybe, but this setup is not very portable and was made for our pipeline. It would require a bit of work to prepare for release and to make it work in most of the environments. LOD switching would not require much of work in this setup. Just computing distance to render camera and then thresholding it into an LOD attribute. But in our case manual decisions proved to be most suitable.
  4. Hi, probably building simple solver could help you. Check out those tutorials, they explain how to build simple and fast fluid solver. If I understood correctly, you need to initialize velocity volume (sampled on faces), then for each simulation step: inject into it velocities from animated geometry, do divergence-free projection, advect velocity by itself and repeat... Probably you might need to enforce boundaries to zero out velocity within geometry.
  5. Here is collection of breakdowns for a project I was working on during last half of a year Vimeo album: https://vimeo.com/album/4471569 Or individual videos:
  6. Hello, I am trying to remove overlapping polygons - I want to do so by computing distance to other polygons using xyzdist(). So I want to specify primgroup which will contain all, but current primitive, so that It is not returning distance to itself. According to documentation, I should pass group string which matches general SOP syntax. So for polygon number 240, primgroup parameter should be "* ^240". When I pass this parameter to the function, it returns -1 in found primitive - no primitive found. I think that the error is causing by this primgroup parameter. If I pass for example "*", then there is also no primitive found. How can I use patterns to define group inside this function? Like 0-50, *, ... This is from the docs: The name of a primitive group or a pattern to generate a primitive group. Uses the same semantics as a SOP group, so empty strings will match all primitives. Any ideas how to make this pattern working? Juraj
  7. Hello, I am struggling with adding all deep render properties inside a mantra node with python. To do so manually via interface is quite simple, I go to node - edit render properties - filter *deep* - add them all. However I am modifying mantra nodes with python and it would be great if I could do the same thing automatically. So far it seems rather tedious - I need to create all ParmTemplates, match their signatures and append to a FolderParmTemplate and set this to the node. Another thing worrying me is menu parameters - I do not need to create interface with menus, can I only set the desired value? Is it equivalent to creating a string parameter and setting it's value to menu item's name (not label)? Thanks, Juraj
  8. So I realized, that it is not possible to set rendering properties as mantra command line arguments. But I found cool solution for my problem, it can be done easily with hscript. opproperty -f /out/mantra1 mantra* *dcm* This did the trick, I am calling it with hou.hscript() in Python.
  9. Now when I think of it, it might be better to pass those properties as command line arguments in mantra driver. How should I format those arguments? For example for DCM Z Storage property. Like this? mantra -vm_dcmpzstorage "16 bit float"
  10. Hi, thanks! It works. int prim; vector uv; int firstPt = primpoint(0, @primnum, 0); vector firstPtP = point(0, "P", firstPt); string grp = "!* ^"+itoa(@primnum); float dist = xyzdist(0, grp, firstPtP, prim, uv, 0.0000001); if (prim != -1) v@Cd = {1,0,0}; However performance is much slower then the previous way. Instant cook vs 4 seconds in this case, maybe using this primgroup parameter is not that efficient. I am still curious about this syntax !* ^240 - how would you explain it? * ^240 means: check against everything, but primitive 240 ! means inversion, like in blast sop: delete non selected, so wouldnt it negate the * symbol? Like that: !* == (nothing) However, if I leave out !*, then it doesn't work. Hmm...
  11. Hello, I am having strange issue - renders coming out of mantra aren't displayed consistently in various apps. I believed that I would be safe with EXRs as they are linear and should be properly displayed in apps. Pixel data are identical when inspected pixel by pixel. However I noticed slight difference when displayed in mplay, nuke, rv, djv_view Any ideas? I made sure that in Nuke I am loading linear exr and no custom lut / IP is being used in viewer. I attached sample exr so that you can test it out. Thanks, Juraj img.exr
  12. Everything well explained here. https://www.sidefx.com/forum/topic/37329/ Still curious why mplay does not interpret .blut lut correctly. With lut from the topic I got match between mplay and nuke.
  13. So it seems like mplay is not interpreting lut correctly :/
  14. I tried to generate in Nuke linear-srgb lut, but it doesn't seem to work in mplay. There is still noticable offset. However using the generated lut in Nuke perfectly matches this color space transformation.
  15. Hi, thanks, displaying it in Nuke as linear and doing color correction to gamma 2.2 seems to provide the same results. So what should be the correct workflow to achieve the same look? Using Grade node with 2.2 gamma as IP?
  16. Here is another frame compared in different apps.
  17. For now I did it another way, since it is only in 2d, I achieved it with this code. int primnum = pointprims(0, @ptnum)[0]; float offset = 0.00001; float dist; int prim; vector uv; int myself = 1; dist = xyzdist(0, v@P + set(offset, 0, 0), prim, uv); if (prim != primnum) myself = 0; dist = xyzdist(0, v@P + set(-offset, 0, 0), prim, uv); if (prim != primnum) myself = 0; dist = xyzdist(0, v@P + set(0, 0, offset), prim, uv); if (prim != primnum) myself = 0; dist = xyzdist(0, v@P + set(0, 0, -offset), prim, uv); if (prim != primnum) myself = 0; if (!myself) { //v@Cd = {1,0,0}; i@inside = 1; } I then promote inside attribute to primitives (using minimum operation) and then blast primitives with inside == 1 But still curious, how to make it working with primgroup option.
  18. Seriously? http://www.sidefx.com/docs/houdini/vex/functions/pluralize Can we get a function that will translate things into another language? Or maybe a spell check?
  19. Hello, I am trying to assign a material to packed disk primitive. This was already asked here many times but still I am not sure about my current situation I have geometry with two groups, I want to assign two materials based on those groups. However geometry is quite heavy so it makes sense to load it as packed disk primitive so that viewport is fast and ifd small. This geo is part of a digital asset, digital asset contains shop network with those shaders. So I need a way to assign material using relative path. I tried it but unfortunately it doesn't seem to work. With absolute path it works as expected. I also do not want to unpack the geo inside asset, because then I would loose packed disk prim advantages. One solution would be to save it with absolute path and put shaders always inside /shop/... But if I could make relative material path assignment working, it would make my scenes cleaner as everything related to the asset is included inside the digital asset. Thanks, Juraj
  20. Again here , I found a way, but it is not very intuitive. I believe there is something easier? Please tell me so For more complex assignments it can be pain to manage this kind of workflow. Basically I divide sheet into three parts and I replace hard-coded shader paths with the relative ones.
  21. Hi, I have a feeling like I am overcomplicating things I got this material stylesheets working, but it does not solve my problem - shader paths are absolute again, so it will not work with the digital asset, because asset's name and location will be changing in every shot. I am sure that there must be a simple solution for that. I would like to keep my shaders inside digital asset to have everything organised.