Archived post by Sasa Budimir

Little trick for those nasty gaps and weird sim behavior in vellum when using attach to geometry constraints. Say you have some vellum sim and want to attach few lines/hairs to it in the second sim (using the first one as collision). There is always a small gap between attached points, and after some time I figured it was due to collisions between those points that is forcing them apart, and causing some weird motion. Easy fix is to just disable collisions on those points that are going to be attached with: `i@disableexternal = 1;` Little GIF that hopefully illustrates things better (or not).

Attachments in this post:
http://fx-td.com/houdiniandchill/wp-content/uploads/discord/20192910/24/19/disable_collision_vellum.gif

Archived post by SniperJake945

if you’re too lazy to search 😛

this is that shit but on surfaces. I cant release the code for this unfortunately but it works on most if not all non degenerate triangle meshes 😮 the tracing methods are based off that keenan paper i posted in cgi-math about intrinsic triangulations 😮

will pump out some longer versions laterrr

gotta actually do work at some point today 😦

but if u dont want to do crazy surface tracing, you can just fake it with xyz dist and primuv, though itll be pretty slow for big meshes like this (100k points)

Attachments in this post:
http://fx-td.com/houdiniandchill/wp-content/uploads/discord/20190510/22/19/jr_physarum_revisited_reupload.hipnc
http://fx-td.com/houdiniandchill/wp-content/uploads/discord/20190510/22/19/jr_surface_physarum_v001.mp4

Archived post by lcrs

discovered a hilarious baking gotcha that should be documented for future searchers of discord – the bake texture ROP does border expansion or diffuse fill to cover the black gaps between UV islands, but it silently fails if you have a background image enabled on the camera node the ROP is set to. only took about 2 hours to figure out <:goose:418150131272122368>

Archived post by matte

Just a random thing if anyone finds it useful – here’s some vex to quantise a value to steps, with variable smoothness: “` float smoothstep(float n; float x) { if (n == 0) return x; return 1.0/(1.0+pow(1.0/x-1.0,n) ); }
vector smoothstep(float n; vector x) { if (n == 0) return x; vector un = {1,1,1}; return un/(un+pow(un/x-un,n) ); }
// step: levels of quantisation // val: value to quantise // rolloff: smoothness
val *= step; vector fraction = smoothstep(rolloff, frac(val)); val = floor(val) + fraction; val /= step; “`

default houdini smooth() doesn’t work symmetrically

Attachments in this post:
http://fx-td.com/houdiniandchill/wp-content/uploads/discord/20192210/08/19/smoothquant.png

Archived post by SniperJake945

I donno how many people here have every tried converting to and from barycentric coordinates, but assuming you can project your triangle so that all points lie on the x and y axis (this is easy peasy with dihedral), this is my favorite method of finding where a point is within a triangle:
“`c //pts is the three points in your triangle matrix3 gen_bary_mat(vector pts[]){ matrix3 m = set( pts[0].x, pts[0].y, 1, pts[1].x, pts[1].y, 1, pts[2].x, pts[2].y, 1); return m; } vector tri_pts[] = array({10, 4, 1}, {3,2,1}, {0, 10, 1}); vector test_pt = {6, 5, 1}; matrix3 bary_matrix = gen_bary_mat(tri_pts); vector bary_pt = test_pt * invert(bary_matrix); //solution by inversion, this is big brain printf(“bary coords: %g \n”, bary_pt); “`

this means u can pre-compute the transformation needed to project a point into bary coords

which is realllllllllllllllllllllllllllllllllllly fuckin nice if u need to do that a bunch

this also extends to tets as well, but it’d be a 4×4 matrix instead of a 3×3

it helps if everything is actually aligned to the z-1 axis, so if z is set to 1, then you can invert the solution as well to convert back to cartesian coordinates

i like to do my triangle projection with dihedral so u don’t have to worry about any kind of scaling being applied to the triangle, like so:
“`c //this would gooooooooooooo in a prim wrangle, and then ud call the resulting trs matrix in a point wrangle to apply the positional changes //big brain matrix3 m = dihedral(v@N, set(0,0,1)); matrix trs = m; matrix mov_to_orig = ident(); matrix mov_z = ident();
translate(mov_to_orig, v@P); translate(mov_z, set(0,0,1));
trs = invert(mov_to_orig) * m * mov_z; “`

iono how useful this is, but ive had to do this kind of stuff a lot on one of the projects im working on

so i thought id share it

en.wikipedia.org/wiki/Barycentric_coordinate_system#Conversion_between_barycentric_and_Cartesian_coordinates the matrix form comes from the bottom of this section. solution by inversion is just the easiest way of solving that system in houdini currently. especially since it’s a 3×3

Archived post by Lorne

this is kind of a cool little thing, was working on some sims last night with very visible source volumes that I wasn’t happy with the look of, but also wasn’t happy with how little density was coming into my sim from them either…usually I’d probably try to rework the shapes and crank the density a bunch on the source, but ended up trying something that worked way better:
– go way lower with your source density than you’d normally think to, like 0.05 kind thing – gas wrangle — @density += @temperature * clamp(@density, 0, 1) * chf(“mult”);

now you’ve got a smoke density that’ll grow a bit more after it’s sourced, but in a really natural looking way that doesn’t show your source so badly and will be swirling and advecting while it continues to pump density

Attachments in this post:
http://fx-td.com/houdiniandchill/wp-content/uploads/discord/20193710/02/19/density_growth_v001.mp4
http://fx-td.com/houdiniandchill/wp-content/uploads/discord/20193710/02/19/broom_puff_fx_main_v008_720p.mp4