Jump to content


  • Content count

  • Donations

    100.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by symek

  1. Mplay opens a port to communicate with mantra on loopback network, doesn't reach for internet. It might also check with license server if you have any Houdini product (including free one) on the machine (albeit it won't consume any license). You are fine.
  2. Karma benchmark

    Did you? This thread is about to be trashed for the lack of merit.
  3. evalAtFrame() and chop constraints weirdness

    i think it's not related to constraints nor chops per se. evalParm() is 'conservative' in a sense it doesn't obey higher order operation (as parenting or constraining), just giving raw channel values. Albeit this line: hou.node(...).worldTransformAtTime(frame).extractTranslates() gives the definite position whenever parented, constrained and what's not happening with a node.
  4. Python setHSV

    cheers! I feel it all the time
  5. Python setHSV

    hou.Color().setHSV expects a tuple of floats, not three floats: for node in nodes: color = hou.Color() hsv = (hou.hmath.rand(node.sessionId())*360, .9, .9) color.setHSV(hsv) node.setColor(color)
  6. What can I do with SideFX Web API?

    Hi, unfortunately this is an infrastructure allowing (typically large) studios to download and license Houdini programmatically via https. It has nothing to do with Houdini itself nor creating geometry.
  7. What is the difference between npoints() and point()?

    Hi RustyMac2020, may I give you a polite suggestions to: - give your threads a correct descriptive titles (like the one above instead of the original "What is the difference?") - avoid asking about things directly described in relevant documentation (like what does a given function) - avoid collapsing many unrelated topic into single thread - finally start using spell checker These are not to make life of a novice user harder, but to lower noise level and make public forum more useful. Thanks! btw documentation chapter about attributes (what they are and so forth): https://www.sidefx.com/docs/houdini/model/attributes.html
  8. step function from glsl

  9. PointDeformSOP captures deforming geometry by proximity, i.e. point on a geometry to be deformed (1 input) 'looks for' the N closest points in rest geometry (2nd input) , then computes deformation comparing rest points' position and orientation to deformed state (3rd input). This deformation is kind of a linear interpolation of control lattice displacement. AttributeInterpolateSOP relies on an explicite mapping of source and target elements. Points being deformed (1st input) are told (by specific attribute) which primitive or point in target geometry they map to. In case of a primitive, they ask for an attribute value in a given prim uv spot. In case of a points, they list explicitly given points and ask for attribute value (multiplied by weight). If you know the mapping, AttributeInterpolateSOP will behave nicer, but mapping might be tricky. PointDeformSOP is forgiving in that respect, but it's harder to control specially in cases different part of a mesh are close in space, but shouldn't influence each other.
  10. Render deep data with Mantra

    This information is easily available in help. Could you be more specific?
  11. You can use Python filtering to change some of mantra properties inside IFD file: https://www.sidefx.com/docs/houdini/render/python.html basically: mantra -f my-scene.ifd -P changing-some-params.py
  12. Anamorphic Lens Squeeze

    Isn't Screen Window Size parameter (View Tab of Camera Obj) what you're after?
  13. get list of materials

    Yep, iterating over points/primitives in Python isn't the fastest operator. Bellow line materials = list(set(geometry.primStringAttribValues("shop_materialpath"))) is considerably faster though, but if you're interested in creating groups per attribute value, I would consider VEX. Something like (untested): int success = 0; string material_name[] = split(primattrib(0, "shop_materialpath", @primnum, success), "/"); setprimgroup(0, material_name[-1], @primnum, 1);
  14. COPS - Current Pixel Position ?

    I think you should be able to achieve this with some effort from your side. Just play with vops a little. You can do this!
  15. COPS - Current Pixel Position ?

    You don't need to set pixels position for that. You want to set the color of a pixels, so that it duplicates the color of other pixels. Example attached. duplicateCOP.hip
  16. COPS - Current Pixel Position ?

    As in case of any compositing application on this planet, pixel position in COPs is fixed. Can you explain what you're trying to do?
  17. COPS - Current Pixel Position ?

    You can't set it, but you can read it: IX and IY are global pixel's indices, and X and Y are global coordinates in normalized screen space. You really could figure it out yourself reading first page of vops for compositing help: https://www.sidefx.com/docs/houdini/composite/comp_vops.htm
  18. PRM_TOGGLE help

    just a quick look:
  19. Journal's gems

    How much I love those sparks of humor in the darkness of (programmers) life: Houdini 17.5.303 Fixed a bug where carefully crafted VEX code could result in a crash. Sat. June 29, 2019
  20. Sure there is: Geometry Introduction cheers! skk.
  21. Houdini stores geometry attributes in continuous chunks of memory containing float/int values (i.e. arrays in C parlance). In other words Houdini's geometry is not designed with object oriented paradigms called array of structures (AOS) where every element is created and stored separately, but it exhibits design called structure of arrays (SOA), which keeps all values of all elements of particular types together. In time, during geometry processing, some of the points /prims might have beed deleted or rearranged. To mitigate the cost of altering those arrays (what basically means allocating new ones), Houdini can decide to leave "holes" in those arrays after entires which are not valid anymore. Because of that Houdini needs to keep track of offsets from the arrays to the actual elements, so that algorithms know where to find right values (that is: third array's entry might not belong to third point in geometry). You can see how it works in action. Create a bunch of points (Grid->Scatter), check that map offset equals points numbering(+1). Now append delete SOP and nuke half of incoming points (operation: Delete by Range) and see what's happened with map offset. Now for second point, map offset equals 3, not 2. Then Append SortSOP and see how point ordering and Map Offset equal again.
  22. I literally haven't done anything except changing constant color to bounding box to emphasize the effect and it does work here (17.0.416 - OSX). COPS have some issues with refreshing. They might not notice your changes and keep displaying old image. Maybe this is your problem?
  23. When To use compression For BGEO

    All depends on whether your actual data processing (the one you perform, not SOPs/DOPs in general) are I/O bound or CPU bound. Compression just trades off one for another. Decompressing takes time, the question is is it less than the time difference between reads of compressed and uncompressed files. Depending on your hardware AND processing the answer may be different. In case you can afford storing cache on SSD disk, most probably compression doesn't make sense (albeit the cost of *.sc isn't big anyway and increasing storage by say 20% is tempting). The slower I/O is (like network storage over the ethernet), the better compression will perform - given the sizeof(files) is high enough and timeof(processing) is low enough. Same thing. It's a matter of tradeoffs. *.sc compresses/decompresses faster for the price of bigger files. *.gz/*.bzip2 are smaller but also way slower for writing and reading. If you save the cache for later reuse and don't mind decompressing it beforehand, *.gz files might be fine. Practically speaking though disk space is so cheap these days, no one cares. Don't bother unless you really have to.
  24. Something like: const std::array<GA_Index,3> interesting_points = {0,13,56}; for (const auto & point_index: interesting_points) { assert(point_index < gdp->getNumPoints()); GA_Offset point_offset = gdp->pointOffset(point_index); UT_Vector3 pos = gdp->getPos3(point_offset); // ... do something with pos } It doesn't have to be inside a loop ofc.