Jump to content


Popular Content

Showing most liked content since 09/24/2020 in all areas

  1. 10 points
    Here is my take on the schizophyllum commune: Project a distorted grid on a displaced torus. Iterate over remeshing and relaxing the grid. Scatter random points along the outer edges. Find their shortest paths across the mesh. Convert the curves into a signed distance field. Offset the SDF contour based on curve orientation. The gills can be flipped by negating the orientation along the path curves. mushroom.hipnc
  2. 8 points
    Midnight recording on how to do a basic texture bombing shader: https://www.youtube.com/watch?v=sUkyHbSocUE texture_bombing_shader.hipnc
  3. 6 points
    Only sharing files and links for peoples that want to learn ..including mine self Here its snippets(File) useful for Tricks and Links for Video Tut INC ...WITH FILE. https://vimeo.com/454127040 https://vimeo.com/207724703 https://vimeo.com/305429043 uiHud.hiplc
  4. 6 points
    Here's another plant generator this time growing from crevices / occluded areas. It's essentially blending the volume gradient with some curl noise based on distance. mushroom_grow_out.hipnc
  5. 5 points
    I tried. I couldn't think of a clever way to do it, but I hope it helps. Mushroom.hiplc
  6. 4 points
    Point cloud based / smoothed occlusion texture going the 2D voxel field / SOP import route. This time featuring a butter squab ; ) texture_occlusion_VOL.hipnc
  7. 3 points
    Here is a procedurally animated creature using some of the all new rigging tools. Had to brush up my russian skills1 to get this working ; ) 1 H18.5 Rigging Tutorial: https://www.youtube.com/watch?v=-AFJ5j47pwE spider.hipnc
  8. 3 points
  9. 3 points
    Currently working on a from-scratch texturing procedure that simulates water running down surfaces. Models shamelessly taken from @animatrix course files. Starting with projected points, the curves run along a volume until they drop onto the next underlying surfaces using nested while loops. The watery effect is achieved in COPs where the texture is drawn based on measuring distance from texture positions to these curves. Alright, enough art, here comes the proof of dripping :
  10. 3 points
    Here is the VEX version of the streaking texture procedure. It's pretty flexible now: Starting curves from uncovered areas to any angle, jumping over gaps, gradually changing target direction, measuring curve length for any point and of course texture mapping. Model taken from threedscans.com streaks_VEX_2.hipnc
  11. 3 points
    Hello, I recently started Houdini and I realized it can be used as a powerful visualization tool for learning mathematics. I visualized the slope field of Lotka-Volterra equations, which are commonly known as predator-prey model. Also, I posted a more detailed explanation of my work on my website. Now, I'm very interested in learning lighting/post-processing skills. So I'd like to know if there are great tutorials on it. Thank you!
  12. 3 points
    Just found the link and Names sharing . LINK
  13. 3 points
    Hello everyone! Every Monday at 12am for the last 3 weeks I have been uploading VEX snippets as mini-tutorials on my website: https://aaronsmith.tv/1-Minute-VEX Here, through '1 Minute VEX', I'll try to walk you through some of the more obscure and advanced functions that exist, and add as much explanation as possible to accompany the images in text based form. These are not for Houdini beginners! I also intend on all of my website's educational content being free - permanently. No donations, no subscriptions, no coupons. Below is 1 Minute VEX III as an example; Let me know if anyone has any suggestions for improvement! - 1 Minute VEX III - Ray-Cast Ambient Occlusion
  14. 3 points
    Particles, L-system more Snippets chops Growth UI31OD.hiplc
  15. 3 points
    Distance from Target SOP -> Target parameter to Plane. fo.hiplc
  16. 2 points
    Instead of using @tan, you should use v@tan. Houdini only recognizes default attributes correctly. So if you use @tan, it is interpreted as one single float for all three axis. Ah.... juse a few minutes too late
  17. 2 points
    Hello once again! Since the last time I posted here I've added three new tutorials, all of which briefly cover textures, mapping and colour in VEX. Thanks to everyone once again for all of the support and useful suggestions! 1 Minute VEX VII - OCIO transformed attribute from image - https://aaronsmith.tv/1-Minute-VEX-VII Using colormap() and ocio_transform() to read an sRGB image and convert it to an ACES-compliant attribute. 1 Minute VEX VIII - sampling nearest texture with UDIM filename expansion - https://aaronsmith.tv/1-Minute-VEX-VIII Using xyzdist(), primuv() and colormap() to sample the nearest UDIM-friendly texture on a surface. 1 Minute VEX IX - triplanar mapping & projection - https://aaronsmith.tv/1-Minute-VEX-IX Using simple vector math, for loops and colormap() to create a triplanar projection. Please feel free to PM me with any questions or suggestions.
  18. 2 points
    You can add vertices to any edge by converting a polygon to a polyline and then sorting it using Intrinsic UV. addvertex.hiplc
  19. 2 points
    Hi, here is another version: With VEX you can insert your point into the point array of a primitive and rebuild the primitive with the new point. choose a primitive, a point and an index get the point array of the primitive and insert the new point to the position given by the index rebuild the primitive with the new pointarray and remove the old primitive insert_point.hipnc
  20. 2 points
    I assume that a triangle has always the same order, so if you add a point between point 0 and 1, just offset the point number after point 1. Let's say you have a triangle, this should work : int pts = primpoints(0, @primnum); removeprim(0, @primnum, 0); vector pos1 = point(0, "P", pts[0]); vector pos2 = point(0, "P", pts[1]); vector new_pos = avg(pos1, pos2); int new_pt = addpoint(geoself(), new_pos); addprim(geoself(), "poly", pts[0], new_pt, pts[1], pts[2]); Cheers,
  21. 2 points
    Hello @kiryha, first of all the torus is a NURBS surface, meaning it's treated as one single primitive which is also already unwrapped in UV space. This makes it an easy target for the primuv-function that is returning the position (or any other attribute) on a primitive at an primitive's intrinsic UV location. Here is what primuv() does to a grid based on a mesh (left) as opposed to a NURBS surface (right): Now when you want to apply a geometry (mesh, points, curves) onto a primitive, it needs to have UV coordinates first. In this case the UVs are based on the grid points positions in relation to the bounding box: v@uvw = relbbox(0, v@P); Because the grid lay on the XZ plane (for no reason in this case) I had to exchange the Z with Y coordinate: @uvw.y = fit01(@uvw.z, 0.2, 0.5); The Z coordinate should then be set to 0 for correctness: @uvw.z = 0.0; So in other words: if the grid was set to the XY plane right away, it's sufficient to transfer the position attribute from the NURBS torus like this: vector UV_grid = relbbox(0, v@P); v@P = primuv(1, 'P', 0, UV_grid); primuv_example.hipnc
  22. 2 points
    the testing Lee Griggs tricks with a textured volume inside a class object Arnold rendering this is rendered with Cycles in Gaffer, next I will try Hydra version from Cycles inside Houdini
  23. 2 points
    The `transform` 3x3 matrix intrinsic controls both rotation and scale. If you're assigning rotations based on quaternions, you're going to run into scale issues because quaternions can't contain scale information. The `w` attribute is for angular velocity, not rotation, so it won't help you here. What you can do is use cracktransform() in VEX to extract the scale from a matrix as a vector, then use the `scale()` VEX function on your rotated matrix to scale it back to the original value, either before or after your rotation (depending on whether you want your scaling to happen in world or local space). You could also consider using MOPs Apply Attributes to handle this for you.
  24. 2 points
    Started to get some cool things myself for a project, using my own ways, still feel a limited to code my own subdivision rules Obviously how not to mention master Michael Hansmeyer here? _______________________________________________________________ Vincent Thomas (VFX and Art since 1998) Senior Env and Lighting artist & Houdini generalist & Creative Concepts http://fr.linkedin.com/in/vincentthomas (Available soon, feel free to contact for reel and resume=
  25. 2 points
    HA! Never mind... i found the problem myself. In case it helps somebody else: I had my spawn points in the same GEO node as my terrain. This messes up the point attributes. Actually I was aware of that before - so i added another GEO node for the spawn points and use Object Merge to collect the points from my terrain geo. Nothing showed up though. The problem was, that you need to use the relative path in the object merge. Not "obj/..."
  26. 2 points
    pre solve means before the timestep has been solved. Post solve means after the timestep has been solved. In a very simple term you can think of it like this: Before the point has moved, after the point has moved for the given timestep
  27. 2 points
    I wrote a custom render engine in COPs today. While 'engine' is probably a bit far fetched, it's a little ray tracer experimentally supporting: Meshes with UV coordinates Shading on diffuse textures Multiple point lights (including color, intensity, size) Area shadows and light attenuation Ambient occlusion Specular highlights Reflections with varying roughness The snippet basically transforms the pixel canvas to the camera position and shoots rays around using VEX functions like intersect() and primuv(). The rendering process only takes a few seconds. I still have to figure the licensing fees, though COP_render.hipnc
  28. 2 points
    Here are the single passes for now:
  29. 2 points
    Inside the resize container node there is Reference field. This defaults to density. However, the bounding box of density is often smaller than the heat or temperature around it. You can extend the Reference field by typing temperature after density. Then the bounding box of both volume types should be evaluated for the resize operation. I often increase the padding up from 0.2 default to 0.5 as well. Worst case scenario you can disconnect the resize container and simply manually animate the Size fields of the smoke object itself.
  30. 2 points
    Recreated all three subdivision types in VEX. It now fast and uses some input parameters. Didn't achieve any worthy results with animating this stuff, however. subdivide_triangle.hipnc
  31. 2 points
    // Point wrangle. #define PI 3.1415926535897932384 float u = fit01(@u, -PI, PI) * ch("revolutions"); vector pos = set(sin(u), cos(u), 0) * ch("radius"); matrix3 t = set(v@tangentu, v@N, v@tangentv); @P += pos * t; Where tangents and normal was computed by PolyFrame SOP, and @u is 0..1 point's position on curve. spiralize.hipnc
  32. 1 point
    maybe ahem...'break' it down to separate steps? - do wall connectors - do glass connectors - then do wall glass connectors pay attention to group names at each step...and connectors names vu_constraints_question.hipnc
  33. 1 point
    Hi, not quite sure, if I understood you correctly. But you can try the following: extract the border edges from the base geometry (SideFx Labs can do this aswell) for each point get the closest point to the base geometry (call it Q or something) from Q get the closest distance to the border use the distance to the border to define interpolation value between @P and Q Here is a modification of your file FlowGradient_mod.hipnc
  34. 1 point
    Today is October 10, the month of Halloween! A super cool theme for rolling and bouncing Pumpkins, Skulls and other Witch Hats! My new video uses Houdini's Vellum module to simulate very kind bouncing objects (softbody), just to enjoy your time! All objects modeling, soft body dynamics and simulation, camera paths, had been made with Houdini v18 from SideFX Simulation calculation time with Houdini was longer than the last animation, about 200 minutes with my AMD Ryzen 9 3900X... I used REDSHIFT v3 to render, and NVIDIA Optix Denoiser to speed up rendering process ! To render all the 2050 frames, it took only 8 hours this time because I'd simplified the textures... Well, it's here : https://www.youtube.com/watch?v=qRVGGYkkIzE
  35. 1 point
    I know it was a long time ago you posted this, but I wanted to thank you and let you know that it was very helpful.
  36. 1 point
    it's not random order, it's ordered by proximity you are looking up n-points in 2nd input whose "P" attrib value is within certain radius from certain value 1. from value of @P, which is different for each point, therefore you will get different points that are closest to that value @P ordered from closest 2. from value of @Cd, which is the same for each point (since nonexistent on first input it's the default value of) {1, 1, 1}, therefore for each point you will get the same array of points ordered by proximity to {1, 1, 1}
  37. 1 point
    A minimalist generator for creating occlusion textures right in COPs. // INPUT vector pos_tex = set(X, Y, 0.0); vector pos_mesh = uvsample(geo_mesh, 'P', 'uv', pos_tex); vector nml_mesh = uvsample(geo_mesh, 'N', 'uv', pos_tex); float a = radians(angle); // OCCLUSION float occ_sum = 0.0; for(int i = 0; i < samples; i++){ vector2 u = rand(pos_tex * i); vector dir = sample_direction_cone(nml_mesh, a, u); vector pos_ray = pos_mesh + nml_mesh * 1e-3; vector dir_ray = dir * range; vector pos_hit; vector uvw_hit; int prim_hit = intersect(geo_mesh, pos_ray, dir_ray, pos_hit, uvw_hit); occ_sum += prim_hit == -1; } float occ = occ_sum / float(samples); // OUTPUT vector color = vector(occ); assign(R, G, B, color); texture_occlusion.hipnc
  38. 1 point
    Hi Max, you can measure the overall point density with pcfind() within a certain radius: int samples = chi('samples'); float radius = chf('radius'); int pts[] = pcfind(0, 'P', v@P, radius, samples); float dens = len(pts) / float(samples); f@dens = dens;
  39. 1 point
    Now when I have everything for better learning (Nice PC-config -first H18 indie version) just happy. Having fun with solvers ..(must learn to combine somehow forces) trying to learn more about solvers ..(fishes- predators- ants -birds -etc-- https://www.red3d.com/cwr/boids/ https://nccastaff.bournemouth.ac.uk/jmacey/MastersProjects/MSc13/08/_assets/i7784427_TusharK_Thesis.pdf
  40. 1 point
    This is a universal fracture-solution that I built to give me interesting results in a more light-weight way than the material fracture. It essentially gives really natural chipping and piece detail. I developed it for the coal plant falling. Unfortunately, it sometimes lead to pieces having zero volume, causing major issues in Bullet sims, but a simple analysis and fix solves that too. @Noobini, this was the culprit. And this is the origins and the core, a looped voronoi with variable densities and iteration count. It yields really good results for structural geometry like buildings. And also a subfracture tool that I built which analyzes the pieces and fractures the ones above the average (+-percentage). Red is the selection, white are pieces eligible from size, but randomly deselected and dark grey is the pieces that are too small.
  41. 1 point
    A few of things. On the gasupres node make sure you set the Fluid Type to Smoke, not Pyro. Also, you have to drop down an attribute wrangle between the lores and the upres node to create a detail attribute named @timescale. When this attribute is missing the time scale defaults to 0, which is no motion. Set it to 1.0 to test, but try other values to speed up or slow down the upres. On the output of the lores dopnet, you need to add temperature and vel fields which get forwarded to the upres network. Without those, the upres simulation won't work. ap_smoke_upres.hiplc
  42. 1 point
    There are enough VEX and Wrangle SOP resources that you can dive directly into it without needed to learning something else beforehand. That is, of course, unless you're planning on learning Processing anyways, then, yes, it will be a little bit of help just like Twan said.
  43. 1 point
    Hi Mirabela, you could trail curl noise and mesh it with varying thickness. Finer details could originate from a displacement shader utilizing to the same curves again. curly_curves.hipnc
  44. 1 point
    An even newer update to Whithers' original helpful post and danw's update that I hope helps those new to Houdini (hopefully Whithers won't mind my copy/paste of much of his original text). I added a few more steps since I'm being very explicit: The vertex node you want in Houdini, at least as of v. 17.5 is called "Vertex - Old." The new node called "Vertex" is an Attribute Expression sop and doesn't work with these specific instructions. 1) Plug the File node with the bgeo sequence into the desired UV sop ("UV Project", "UV Texture", etc). 2) Plug that UV sop into a "Time Shift" sop. 3) Click in the "Frame" field of the "Time Shift" sop and change it to 1 (or whichever frame you are "locking"). 4) Connect the "Time Shift" sop to the second input of the "Vertex" sop. Again, it's actually the "Vertex - Old" sop. 5) Connect your File node (your imported .bgeo file) into the first input of the "Vertex" sop. 6) Click on the "Vertex" sop and about halfway down, change the "Keep Texture" tab to "Add Texture." 7) You will see green boxes that say @uv.x, @uv.y and @uv.z. Change these to @uv2.x, @uv2.y and @uv.2.z. The original instructions confused me at this step and I first changed it to @uv.x2, etc. which doesn't work Your texture should now stick to your geometry. I even applied it to a specific piece of my entire .bgeo animation (using the blast node to separate it from the rest) and it worked great. Thanks again to the previous posters for their instructions. Hope this helps on the newer versions as well.
  45. 1 point
    here's a basic setup/proof of concept...just keep it simple. Slowly add more things/collider in as you need them. Don't have EVERYTHING in at once, you'll get bamboozled and can't debug things. vu_vellumCurtain.hiplc
  46. 1 point
    OK now its really solved: I used this script based on toadstorms one: //Initialize Up and N v@up = set(0,1,0); // Set up Vector v@N = chv("N_vector"); // select the Axis //Set the Min and Max Value for the Rotation Range float MinAngle = ch("MinAngle"); float MaxAngle = ch("MaxAngle"); float rotateGrid = fit01(@ptnum/(@numpt*1.0),MinAngle,MaxAngle); // create a 3x3 orientation matrix using N and up as // the principal axes. matrix3 m = maketransform(@N, v@up); // now rotate this matrix around the N axis over time. vector axis = @N; float angle = radians(rotateGrid); rotate(m, angle, axis); // make the orient quaternion from this matrix. // the copy SOP reads this automatically. p@orient = quaternion(m); It works just fine and i´m quite proud cause this is also compile friendly (just learned in this Thread compiling exists) THX a looooot - learned so much in this Thread!!!
  47. 1 point
    Less lazy attempt: pop_minpos_align_pig.hipnc
  48. 1 point
    In Alejandro Files, AutoDopNetwork>pyro(Smoke Object)>Fields>Rest is checked on but AutoDopNetwork>pyro(Smoke Object)>Initial Data>Add Rest Field isn't checked neither AutoDopNetwork>pyrosolver1>Advanced>Rest Field>Enable Rest. So how can it produce Rest datas? You can see that if you middle click on import_pyro_build>import_pyrofields there are no rest.x rest .y and rest.z, they do appear if you check the Add Rest Field and Enable Rest as previously mentioned. So i don't really understand how the Alejandro file is interesting for the "Rest" purpose. Maybe i miss something. It's good for the explosion rendering. This next thread is a good answer: http://forums.odforce.net/topic/20659-fluid-simulation-what-is-rest-field-for/ it has a link to a project that Ian generously share with the odforce community: http://fx-td.com/?p=329 This next link also help to understand, even if the provided file may turn houdini down: https://www.sidefx.com/forum/topic/31320/ The best answer i've found is in the Steven Knipping tutorials, at the end of Applied Houdini - Dynamics 2 he turns on the rest field and in Dynamics 3 (5b) he explains how to use it. The entire bundle is brilliant, you can watch the 1 out of 6 for free. It's here: https://www.cgcircuit.com/bundle-details.php?val=28
  49. 1 point
    Ohh it's been a year since the last update, gotta start popping the accumulated r&d stack! Tonight I ran into vinyvince's thread on Hansmeyer's systems, and remembered I wanted to do those too. Here's the simplest "System 1" - it would've been easier to do it in code, but this time in SOPs: The system is simple and symmetric, so the animation is really quite boring. If the geom1etry is converted to nurbs curves it looks a bit more interesting as a still, here's only the 8th generation: And this is the above, animated and accumulated. With more interesting movement and some color action these are gonna look a lot better, but this is a nice start. hansmeyer_subdivision_09.hip
  50. 1 point
    As you've found, it can be tricky to get objects to fly through a wall with dynamic fracturing. You can do it, but you need to mess with the collision relationships; in your case the bullet should affect the wall but not vice versa. But even if you do that it can be tricky to make sure the wall stays completely still when the bullet passes through. In this case probably better to take a cue from the practical FX guys and place small "charges" (AKA Magnet Forces) everywhere you want a bullet impact to be and have them go off in succession, ending up with a final big blast for the artillery shell. See the attached for an example. I've drawn a curve with points where each impact should be and copied a metaball to each point, then delete all but one of them as the frames progress. These metaballs then serve as the Magnet Forces that make up the charges. You could also do this by avoiding dynamic fracturing completely and pre-fracturing the wall. Then just selectively Activate and blow out pieces around the various bullet spots. Look at the PRE_FRACTURED_WALL node the bullet_blasts geo. There's a lot going on here for an intro to Houdini, but it shows some of the cool procedural nature of it. For example, you can put the Display flag on the PRE_FRACTURED_WALL node, then select the Curve node, hit Enter, and interactively move the bullet holes around. As for the substeps, you can substep the entire DOPNet, or just the RBD Solver. With dynamic fracturing the FractureSolver is a separate solver from the RBD Solver, so you're better off substepping the DOPNet itself, which makes the transitions between intact and fractured objects smoother. Good luck. bullets_wall.hip