Jump to content


  • Content count

  • Donations

    30.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by ikoon

  1. VEX SIMD vs. Remove coincident primitives

    @MrScienceOfficer @pusat Thank you very much for your answers. I think I understand it now, we have to do the duplicity removal in two wrangles. One Primitive Wrangle to create the list of duplicities, and second wrangle to act on the complete list (collected from all the first wrangle's threads and primitive subsets). As regards the Entagma code, it can create duplicate connectors indeed. In one (sub)frame, if the random condition is met from point A to B and also from B to A. Even if we set and check the @processed attrib. Which is allright, I just had to grasp it. Thank you very very much for your help!
  2. This thread is also about the order of execution (setattrib, remove geo, add geo) and comparing if(@processed==0) of un-initialized @processed attribute. I was trying to script "remove coincident primitives" (or at least group them) in a single wrangle and I realized that I don't understand some invisible details of VEX execution. Is it possible to run VEX over big number of primitives, compare each primitive to each primitive, remove duplicates, and also set "@processed=1" attribute and speed the execution by skipping processed primitives? Below is an example from Entagma tutorial, https://vimeo.com/227701595, by Manuel Casasola Merkle. But if I understand it right, over big number of points, he may get multiple "same" results? Which in this case is ok, but in my case of "remove coincident primitives" it is a problem which cannot be "tricked" in one primitive wrangle? Please, if you understand my "SIMD and execution order" confusion, could you direct me? (fast non-vex way to remove coincident overlaps is PolyDoctor SOP) float rval = rand(@ptnum*@Time*1245687); if (rval < 0.01 && @Time > 2.0){ int nearpnts[] = nearpoints(0, @P, 1); foreach(int pnt; nearpnts){ int tarmyprim = point(0, "index", pnt); int tarprocessed = point(0, "processed", pnt); int taringroupends = inpointgroup(0, "ends", pnt); if(tarmyprim != @index && i@processed == 0 && @group_ends == 0 && tarprocessed == 0 && taringroupends == 0){ int nprim = addprim(0, "polyline"); addvertex(0, nprim, @ptnum); addvertex(0, nprim, pnt); vector tarpos = point(0, "P", pnt); float length = length(@P-tarpos); setprimattrib(0, "restlength", nprim, length, "set"); i@processed = 1; setpointattrib(0, "processed", pnt, 1, "set"); setprimgroup(0, "connectors", nprim, 1, "set"); //break; } } }
  3. OFFF London title's particle

    This might help you, similar effect is described here: https://mp.weixin.qq.com/s/aL72NA03SGn4jCs27f_lgA? Atom did a google translate here:
  4. I assume that you mind, that in the upper region, there are more points scattered. That is because of the "coincident" shortest paths (primitives) being in the exact same position. I don't know the algorithm of Relaxation of Scatter SOP node, but it seems that it doesn't take into account coincident positions on different primitives. I tried to remove coincident primitives. I followed the link by tamte ("Anim" here on odforce) and added Convertline SOP, Fuse SOP, PolyDoctor SOP and I attach a proposal of solution. https://www.sidefx.com/forum/topic/54451/?page=1#post-244403 missing_prims_pathfinder - v1.hiplc
  5. You can use the Stash SOP to embed the geometry into .hip http://www.sidefx.com/docs/houdini/nodes/sop/stash.html
  6. Try Except in VEX alike in Python?

    Hi, you could add the missing definitions of set() and include them? But that is probably not what you want. Edit: I have tried one of the missing definitions: float[] set (vector2 input) { return array(input[0],input[1]); }
  7. display message in sceneview

    Please, how could I print a message to the sceneview? As in the picture below. So far I solved it with the hou.ui.setStatusMessage() (which doesn't work if cursor is over the network pane (I did RFE it now)).
  8. Hi, please. I don't like, that the default state of the autoscope of TRS parameters is set to True, even when they are not animated. I have a script (below) and I run it on ~100% of the newly created Geo nodes. I am afraid to touch the "original" nodes. Please, what would be correct (and future safe) way to change the default state of the newly created node? def autoscope_off () : default_autoparms = ["tx","ty","tz","rx","ry","rz","sx","sy","sz"] for node in hou.selectedNodes() : for autoparm in default_autoparms: try: parm = node.parm(autoparm) parm.setAutoscope(False) except: print "parm [" + autoparm +"] doesn't exist"
  9. Oh, this is great, thank you very MUCH!
  10. Filter/Solo CHOP Graph?

    Hi Atom, I use to have a bypassed Delete CHOP up in the stream. I temporarily enable it, when I want to preview and finetune the chops. Bad solution but it works. It also speeds up the solving.
  11. Thank you very much! I have discovered, that the problem appears, when I enable these two things at the same time: - enable High Quality Lighting on the OpenGL ROP - enable any light in the scene Then the wires (open polygons) are not antialiased. Closed still render antialiased, fine. I will investigate some more. Thank you very very much, I can do my render now.
  12. Please, did you manage to render the wires (edges) with anti-aliasing with OpenGL ROP? Polygons get anti-aliased fine, so I could PolyWire the wires, but that slows down the render.
  13. no cross ?

    Hi, try to define the up vector like this: set(0,1,0) or {0,1,0}
  14. update corresponding parameters tab

    Now I have tried this, it should work better? node = hou.node('/obj/geo1') parm_pane = hou.ui.curDesktop().paneTabOfType(hou.paneTabType.Parm) parm_pane.setCurrentNode(node) The method setCurrentNode() is not yet documented, but arguments are here: http://www.sidefx.com/docs/houdini/hom/hou/PathBasedPaneTab.html
  15. update corresponding parameters tab

    Hi! .setSelected() should work?
  16. Please, why doesn't the stamps() function see the variables (DOPNET for example) in the Parm Editor? Please look at this picture: I would like to understand what is happening, I am learning DOPs. I understands it like this: - when sim is running, the SOP Solver DOP is cloned (attached) onto all appropriate objects (which are wired, and active) - when I am editing the scene and dive into the SOP Solver DOP, I am inside one of the clones ("random" one?) But there is something MORE ... something I don't see. I believe that understanding of this "MORE" could help me understand the "Solver Per Object" option and "Group" mask option? Please give me a clue, if anybody can. stamps.hiplc
  17. Rolling up grid in SOP vex

    Hi! Here is a great fold/unfold in VEX: https://vimeo.com/235819159 Also here: https://vimeo.com/155770571 I hope I understood well.
  18. How to Make a long smoke in Houdini

    Hi, there was also a similar discussion previously: http://forums.odforce.net/topic/25109-pyro-upres-advise/
  19. I was using this simple script (with hotkey) for a while, but it is probably not right way to do it. Sometimes the playbar gets "stuck" and play() command doesn't work. Even if I run hou.playbar.play() from the python shell. I have to push the UI play button then. I assume, that a right way is to use eventCallback(), but I cannot make it work, too. Please, do you anybody have working script for that? if hou.playbar.isPlaying() : hou.playbar.stop() else : hou.playbar.play()
  20. [python] get active network editor

    Hi JJ, Varomix did post this, once. It may help you: def getNetworkType(): # get desktop curdesk = hou.ui.curDesktop() activepane = curdesk.paneTabUnderCursor() return activepane.type()
  21. As regards the Orange Lady, F1 already sent a solution previously, here:
  22. Anything I can do in Houdini is thanks to the great community of people helping and sharing their knowledge. Thank you everybody, you guys rock! This is my first job done fully in Houdini (+AE) and my client let me share the source files (attached in this post). Rendered animation is here on vimeo The included network is quite simple and I hope it can help beginners to learn Houdini. I have tried to avoid slow for each loops and copy stamping, so you can find few small tricks in there. It was rendered in one afternoon on Redshift and two 1070s (cca 1.8K pixels res). And also warning: some of the effects and glows are done in AE. Used VEX if, vertexindex, smooth, rotate (matrix), setpointattrib addprim, addpoint, addvertex, removepoint user-defined functions Used CHOPs lag, math, spring, geometry, envelope, area, trigger jiggle (even for single channel) chop() expression Used VOPs dot product (to control the linear falloff), cross product primuv, volume samples VDB vdb activate, custom masked advection (clouds) nearpoint (to sample the mask advection offset) SOPs uv texture(rows&columns) to control the ramp (color&pscale) along u attribute interpolate, attribute transfer, solver polyextrude (with local controls) RedShift volume shader, light instancing point and vertex attributes odforce - project - v1.zip
  23. vex noise output bounds

    Please, how do you deal with the output bounds of noise in vex? I usually want them (-1,1) and I set turbulence and roughness, then I use to manually tune the amplitude. I assume, that exact bounds is expensive and it can be done in two steps (generate > fit to min, max) but isn't there any practice that I am missing? I was thinking about building approximate "hardcoded" lookuptable of [turbulence, roughness, attenuation], outputting the amplitude? Some minor overshoot is usually not a problem (or is desirable).
  24. Quaternion To Euler ?

    I was using DJs code, but in some rotations (for example 90° x, 90° y, 0° z) it is not evaluating right. So I ended with this: matrix m = qconvert(@orient); v@rot = cracktransform(0, 0, 1, {0,0,0}, m); Note: Rotation angles are returned in degrees.
  25. Switch Radio Button in Python

    Hi Szalbolcs, I am python newbie, so there is probably better solution. I wanted to switch Tabs (which is just different type of folder, Radio Buttons are also type of folder) with python. I solved it like this: - add new int parm (invisible) - add expression, reference the name of the first Tab (add "1" to the name) - switch that new int parm - Tabs get synced, as "side effect" Maybe you will find a better solution. Otherwise, here is mine. Attached is .py doing all these steps. EDIT: btw for some reason, the initial naming of Tabs (when the node is created) is "wrong" and gets updated as soon as you read (or update) the UI. So, in my code, I start by addSpareParmTuple() and then ask for the Tab name. This is some Houdini thing, which I don't understand. You may try to read parmTemplateGroup() entries() on a new node twice. The second time, folder names are different, updated. Then they stay like this. folders.py