Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by anim

  1. not saying it'd be technically impossible to make system like this as I don't know but I can't imagine how clever the devs would have to be to be able to decipher the feedback dependencies of individual solvers considering that every iteration you can have completely different amount of points fed in, different branches active within the for loop, etc. so even if all simdata was cached for all "virtual" solvers on each frame there is simply no telling which solvers in next frame of for loop should get which data, unless there was some tagging system which would help define those dependencies, but certainly not automatically so in my opinion, I wouldn't consider it a common technique, however I get that it may seem trivial at the first glance, maybe with the assumption of constant number of copies and memory to spare for all simdata solvers need for next frame what's common however is pre-caching data or instead of solver use Feedback For Loop, which since not cached will compute all iterations from scratch every frame, but will at least work within loop so for lightweight experiments why not In production you would probably use wedging to produce all your simulated copies
  2. Smooth direction to surface?

    to me it looks like Closes Surface (Smoothed) is a Minpos from your geo to the subdivided (smoothed) version of the target geo, then just intersect original target geo in direction towards that position since at the moment xyzdist/minpos can't represent geo as subd limit surface natively, you have to use subdivide sop to create such representation, so to get really smooth results you either subdivide a lot or subdivide enough and apply a little post smooth/reproject step at the end that being said I wish xyzdist, intersect and all similar function could trace against subd limit surfaces
  3. Rand value in Group Expression

    all hscript or python expressions that are used in VEX snippet are evaluated (therefore expanded into just text) at the first frame, so the only thing you'd use them is to help you produce the VEX code however since snippet VEX code is compiled only at the first frame, you'll get the values from your hscript/python expressions evaluated only at that frame, you can see how your code looks like when you View Vex Code of the underlying Attribute VOP or in case of group/attrib Expression, there is a Generated Code tab where you can see expanded snippet code
  4. Rand value in Group Expression

    as you said nprims() is hscript so if you use it in a snippet using backticks it will evaluate just when the code is compiled on the first frame, so you'll end up with hardcoded value 6 in your case instead of real number pf primitives so just use @numprim as suggested above something like this will do @primnum==@numprim-floor(rand(@Frame)*4)-1
  5. well, if you are just matching normals why not doing @N = v@opinput1_N;
  6. POP Grains - Experiments and Issues!

    try disabling Constraint Averaging and adjust your weights as Jeff describes in this master class around 32:50 https://www.sidefx.com/tutorials/h15-masterclass-grains/
  7. just use stamp expression on your asset at Scene level and refer to the copy that you want to use to evaluate the value per copy simple example copystamp_scene_level.hip
  8. Turn selected folder into an absolute path

    abspath = hou.expandString(folder)
  9. Quaternion questions

    a) if the angle is 0, you will get identity quaternion {0,0,0,1} so no rotation as the angle/axis notation defines quaternion as a rotation of angle degrees around the axis, if the angle is 0, then the rotation around given axis is 0 and hence no rotation b) vector4 Q_Init = eulertoquaternion(radians(chv("q0")), 0); vector4 Q_Dest = eulertoquaternion(radians(chv("q1")), 0); vector4 Q_Diff = qmultiply(Q_Dest,qinvert(Q_Init)); // quaternion difference from Q_Init to Q_Dest int nsteps = chi("nsteps"); Q_Diff = slerp({0,0,0,1},Q_Diff, 1.0/nsteps); // compute Q_Diff rotation for single step p@orient = Q_Init; for (int i=0;i<nsteps;i++){ p@orient = qmultiply(Q_Diff, p@orient); } // after adding Q_Diff nsteps times to Q_Init p@orient will result in Q_Dest
  10. Beginner VEX variable questions

    @elemnum contains current element number so when iterating over Points it's the same as @ptnum, over Prims the same as @primnum, over Vertices the same as @vtxnum, over Numbers it's the current number same equivalency for @numelem
  11. you don't need loop at all, just promote your attribs to get average values per prim to each point compute transform attribute and invert transform then use Transform By Attribute SOP to transform back and forth as you need, see the file rotation_reset_at_origin_fix.hipnc
  12. Copy Stamp / For-Each / Compile-Block

    it looks like a bug, something with alembic and overall packed primitives viewport optimization in H16.5 H16.0 seems to be fine
  13. it's just because that piece has the same pivot as it's parent and it's oriented to the opposite way, so if you rotate the parent, it will follow, but it's own local rotation will cancel that perfectly so it will not move at all in the world space
  14. description in the file PolyTransforms_fix.hip
  15. Displacing displacements for curly paper

    here are 2 examples displace_example.hip
  16. Displacing displacements for curly paper

    just a lazy way to describe one displace along normal applied after another, or simply any operation that advects P along any vector until you get to final P and N in Houdini you can move P around to any position to create displacement, what can be tricky is to compute corresponding N, but however you get to new P doesn't have to be just moving along N or custom vector. Let's say you want to advect P through volume vel in a several steps, well, why not Mantra still needs to dice geometry to get enough resolution for Displacement or achieve perfect smoothness for Subd, so no, dicing is not only for micropoly, however micropoly has to dice every geo as it's shading corners of micropolygons, in Raytrace mode dicing is purely to generate hi res geo to raytrace against like in mentioned cases Shading Quality is controlling dicing density based on geometry before displacement Re-Dicing runs trial dice and displace pass just to measure area of displaced geometry, then adjusts dicing density accordingly and displaces for real, therefore hopefully giving you more micropolys where you need them
  17. Displacing displacements for curly paper

    just a note to displacing displacements it doesn't matter how many displacement steps you do as they are all added to single vector displacement value in the end so whether you do it at once with some function that maps starting point to the end or if you displace with recomputing new P and N and displace along the new N again, or in any direction it's essentially the same the only difference is in the cost of the calculations you decide to use to come up with the final P and N for very extreme displacements to make sure you have enough geometry to move around you can turn on Re-Dice Displacements property ( vm_redice )
  18. a poly primitive can't branch you can however try appending PolyPath SOP to minimize number of primitives your geo is composed of
  19. Combine VDB vectors

    accurate velocity is sort of arbitrary as it depends on the situation, I was reacting to the need of pure average also just using volumesamplev() will give you 0 or Background value for volumes sampled outside of their active regions, making it essentially the same, so other math is still requited to average just active velocities in either case I agree that in most of the real world cases just average of velocity field is not useful, it's much more useful if you compute weighted average based on length or density of all incoming vel fields
  20. you can read more about matte shading here: http://www.sidefx.com/docs/houdini/props/mantra.html#shading
  21. it's because box is casting shadows on the volume by default glass material doesn't allow light through, you can either enable Opacity/Fake Caustics on your glass shader for fast approximate or allow All Paths on Mantra/Rendering/Shading/Allowable Paths, but I wouldn't recommend that as it is not only slow and extremely inefficient for uni-directional pathtracer like Mantra, but you'd need to have Volume Limit set at least to 1, which is additional performance hit, so I'd stick to fake caustics
  22. you can blend and layer materials in houdini so if you paint your mask in Mari you can use them to create soft transition between completely different materials if you desire https://www.sidefx.com/tutorials/houdini-16-masterclass-custom-shading/ not sure about Mari, but Substance Painter for example allows you to easily combine and paint materials directly so all your final textures have appropriate values for all the parts of your geo and ideally can be used in a single material without any additional work
  23. glue constraint issue

    such behavior happens if you are updating constraint geometry on your Constraint Network DOP every frame by default this happens if your constraint network geometry in SOPs is Time Dependent, so you seeing this behavior means that it probably is so either make sure your constraint network is not time dependent OR that Overwrite with SOP parm on Constraint Network is 1 only on the frame you want constraints to be updated from SOPs but 0 on other frames, so usually 1 only on first frame of the sim
  24. Combine VDB vectors

    or you can also use Add in VDB Combine then afterwards just divide by number of volumes to get the average
  25. Hard constraint angular motor

    it's because the Axis 2 is set to 0,1,0 too and it seems like bulet is using it as an upvector or something even though it's greyed out so just temporarily set Number of Motors to 2, set Axis 2 to 1,0,0 and Number of Motors back to 1