Jump to content

All Activity

This stream auto-updates     

  1. Today
  2. incrementing float attribute over time

    Thank you for your suggestions. I still dont get it to work as i want. Probably me that is thinking about this all wrong. 1. is it possible with vex only to increment a number over time? without the solver at all? 2. My thougts are, to have a trigger attribute, when this attribute is over 0 a new attribute say startanimation is starting to count. This attribute needs to start at 0, be a float and count upwards over time. I 3. i can get the startanimation to correspond to the framenumber but this wont make it start from 0. Sorry for being a pain in the ass but i dont really get the concepts yet.
  3. POP Float By Volume, issue...

    There are some changes that need to be made in the setup.
  4. Yesterday
  5. Attach to Geometry for Popnet

    Separate out the points you're looking to use post sim by @id so that they don't flicker and use a Copy to Points or instancing setup. Highly recommend taking a look at Toadstorm's instancing blog post for a deeper understanding on how to control your copies - https://www.toadstorm.com/blog/?p=493
  6. Houdini to Unreal workflows

    Anyone expereinced with Houdini to Unreal workflows? Looking for some sort of comparison table to help determine when to use different export options for animated or deforming meshes. - VAT - alembic - fbx via rbd to fbx - fbx via dembones skinning converter So many options!
  7. Hey quick question, is there something like an attach to geometry node for a popnetwork. I want to attach a few points in a popnet to a geo.
  8. Here's my solution straight from hell. It's not fully cleaned up yet. Using PrettyPrinter because it's difficult to tell if it's even working. I guess I'd have to plug it into the another endpoint to see if it's working for me. import pprint pp = pprint.PrettyPrinter(indent=4) # [1] Settings node = hou.pwd().input(0) # tested with python sop excluded_folders = ['Top Folder One', 'Top Folder Two', 'Another Not Used Folder'] use_folders = ['Settings', 'Another Folder Name'] # [2] Defs # parm object example parm_obj_template = { "name": "parm_name", "label": "parm_label", "type": "type", "min": 0, "max": 0, "value": 0 } # folder object example folder_obj_template = { "name": "folder_name", "label": "parm_label", "type": "type", "folders": [], "parms": [] } parm_types = [hou.parmTemplateType.Float, hou.parmTemplateType.Int, hou.parmTemplateType.Toggle] folder_types = [hou.folderType.Collapsible, hou.folderType.Simple, hou.folderType.Tabs] def __is_parm(parm): return parm.type() in parm_types def __is_folder(parm): return parm.type() == hou.parmTemplateType.Folder def __get_parms(folder): return [parm for parm in folder.parmTemplates() if parm.type() in parm_types] def __get_folders(folder): return [parm for parm in folder.parmTemplates() if parm.type() == hou.parmTemplateType.Folder] def __get_parm_obj(parm): data = {} data['name'] = parm.name() data['label'] = parm.label() data['type'] = parm.type() data['min'] = parm.minValue() data['max'] = parm.maxValue() data['value'] = node.parm(parm.name()).eval() return data def __get_folder_obj(folder): data = {} data['name'] = folder.name() data['label'] = folder.label() data['type'] = folder.folderType() data['parms'] = [] for parm in __get_parms(folder): data['parms'].append(__get_parm_obj(parm)) pass data['folders'] = [] for subfolder in __get_folders(folder): if __is_folder(subfolder): data['folders'].append(__get_folder_obj(subfolder)) pass return data # [3] Run group = node.parmTemplateGroup() top_folders = [folder for folder in group.entries() if folder.type() == hou.parmTemplateType.Folder] included = [folder for folder in top_folders if folder.label() not in excluded_folders] def node_obj(): data = { 'name' : node.name() } folders = [] for folder in included: folders.append(__get_folder_obj(folder)) pass data['folders'] = folders return data print('\n-> Start') pp.pprint(node_obj()) print('End <-')
  9. Hi, I need to get all parms of a node structured like an object, going from top folder down. Here's a pseudo-code structure I'm looking for: parm_obj = { "name": "parm_name", "type": int/float/bool, "min": value, "max": value, "value": some_value } folder_obj = { "name": "folder_name", "type": tab/collapsable/simple "folders": [folder_obj_1, folder_obj_2, ...], "parms": [parm_obj_1, parm_obj_2, ...] } node_parms_obj = { "name": "node name", "folders": [folder_obj_1, folder_obj_2, ...],, "parms": [parm_obj_1, parm_obj_2, ...] } Because folders contain more folders it gets quite tricky. So I need recursive functions for that. But I'm failing so far. I've looked into docs and I'm surprised that there's no method for that already! Or am I missing something? Maybe there is? Do you guys have any tips on how to deal with it?
  10. Hello friends. I wanted to ask you how you would approach solving such a task? There is a model with uv, divided into hard/soft edge, smoothing groups. It is necessary to make a mask on the hard edges of the normals. And output the mask via uv. Uv should not change. Any ideas on this? Thanks.
  11. Last week
  12. Vellum Hair error

    Does someone know why I'm getting this error with vellum hair? Its a very simple scene with a spline only causing the error and crashes. H19.5.368 clBuildProgram (-11) 1 error generated. OpenCL Exception: <kernel>:1907:20: error: blocks support disabled - compile with -fblocks or for OpenCL 2.0
  13. With the old Curve node, you could change the geometry from python like so: node.parm('coords').set(string_of_coords) I had a working python shelf tool that would grab the point positions from some node further down the chain (for instance, an Edit SOP), then copy them back up to the original Curve SOP, allowing you to delete subsequent Edits, Transforms, etc. and bake them into the original curve. This was really useful in the case where you're drawing a bunch of control curves, then having to adjust them a bunch of times, and you don't want a pile of extra nodes cluttering up your network. With Curve 2.0, the points seem to be generated by a zillion wrangles, operating on history entries that are stored as points in an internal Stash SOP (called parm_points). I say "history entries", because there are a lot more of them than the number of points on the curve itself, and have an "optype" attribute with values like append/delete/transform/etc. The docs say that hou.Geometry objects are read-only except within a Python SOP, and that a Python SOP actually operates on a frozen copy of any hou.Geometry that it operates on. I assume this means that it doesn't change the contents of the original Geometry. The Curve SOP also has a hidden parameter "parmpoints" that when you call eval() on it returns a frozen Geometry that corresponds to the "history" Geometry in the parm_points Stash. Setting the parmpoints parameter to None clears out the Stash. So there's clearly some mechanism tying the two together. But the frozen parmpoints Geometry gives read-only errors when you attempt to clear or edit it. So I guess maybe the way to reset the Curve 2.0 node to a simple set of points with given positions would be: create a new Geometry object from scratch, populate it with the appropriate "append" and "transform" entries, then set the parmpoints parameter to the new Geometry, and hope whatever magic is in there pushes it to the Stash? Note: While the Curve 2.0 does have better controls for editing, it's still not fully-featured: you can't select and move multiple points without it resulting in an Edit SOP being created, you can't add points to the ends of the curve (I think?) without adding them somewhere in the middle, moving the old end point, then moving the new inserted point to where the end used to be, etc. So baking subsequent changes back to the original Curve is still a useful operation.
  14. It seems to work with animated curve sets as well. lib_flip_curve_follow.hipnc
  15. Building PC for VFX and motion graphics

    All the 4090s are basicly the same. The windforce have a vapor-chamber that will lead heat away from other components. And you dont want to overclock something that will be rendering 24/7. And you need alot of storage, that stuff runs out pretty fast, and 500gb is nothing. 500gb is barely enough for windows/software alone.
  16. incrementing float attribute over time

    Hi, I've made a quick setup similar to what Felix suggested. Hope it helps increment_anim_value.hipnc
  17. Some Speed trick From I think Qiita Students. curve_follow.hipnc
  18. Hello, It is noob question.. When I try to use PopCurveForce on the FlipFluid to make it follow a curve, the speed seems to suddenly decay. How can I make it follow the curve while maintaining speed? thank you fluid_question.hipnc
  19. Pragmatic VEX: Volume 1 [4K] [H19.5]

    KineFX driven Face Peeling FX presentation at Gamescom Asia 2022 (Singapore) is up on SideFX Houdini vimeo channel: There is a sneak peek of Pragmatic VEX: Volume 2 where I showcase the new Poly Carve SOP, one of the major chapters in the upcoming VEX course. I also talk a bit about my own UX design in Houdini based on the inquiry by Fianna Huge thanks to SideFX for letting me present on their platform Hope you find it useful!
  20. Building PC for VFX and motion graphics

    No idea about the 4090, but for sims you will need much more disk space. Especially flip sims can take a lot of disk space and if it is a bit more complex you save the simulation result, volumes, meshes, whitewater source, whitewater particles and finally whitewater volumes. Even for a few hundreds frames this will exceed your 500GB. You will need at least a few terabytes.
  21. Building PC for VFX and motion graphics

    Any comments on Gigabyte 4090? I can't find any comparisons for different brands when it comes to rendering.
  22. Hello Hi Has anyone had success with the combination of "flip slice > rop geo out > hqscheduler"?
  23. incrementing float attribute over time

    Trigger should be created before the solver and set to zero. In the solver triggerr is only set to one if mask is one and trigger zero like: if(@mask > 0.5 && @trigger == 0){ @trigger=1; @triggerframe = @Frame; } Hope this helps
  24. It may have been a restriction on time dependencies inside of Mantra but It's been almost a year since I switched to Karma. Might want to check out a similar approach in Karma/MaterialX shaders instead at this point as Mantra is on its way out
  25. That worked great, thank you @ryew!!
  26. HDA: Reference to external files [FIXED]

    I solved that myself and found a better way than a custom script. The solution is in the image below.
  1. Load more activity