Jump to content

konstantin magnus

Members
  • Content count

    908
  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won

    87

Everything posted by konstantin magnus

  1. Procedural Mushroom - Video Tutorial

    How to create a procedural mushroom model in SideFX Houdini. Video: Original thread: Latest file version: https://gumroad.com/konstantin_magnus
  2. Like Sketch ?

    Hand painted looking textures for low-poly models: paint_bake.hipnc
  3. Modeling Dry Fruit And Color by Attribute

    The sweep SOP can do the shape along with remapping the UV coordinates and Vellum for additional deformation. dry_fruit.hiplc
  4. Batch render objects

    I am working on a script to render all OBJ-files from a folder separatly in the same scene. How can I make a python script wait for a render to finish, so it can then load the next OBJ file? (I am not looking for a frame-based solution.)
  5. Like Sketch ?

    Good art work! You can also make curves follow the mesh topology by choosing directions towards neighbour polygons. topo_flow.hipnc topo_flow_only_curvature.hipnc
  6. Like Sketch ?

    Thanks, but I am not so sure whether this comes close to the example image you have provided. -> Most of us just trail scattered points. So would anyone know how to achieve evenly spaced strokes? https://mrl.cs.nyu.edu/publications/illustrating-smooth/hertzmann-zorin.pdf
  7. Square Bottom Bottle Modeling Question

    If you want the top to be perfectly round, just scale the grid to 0 and control its radius with the offset in the attribute wrangle.
  8. Square Bottom Bottle Modeling Question

    Hi Max, first rule: do not boole. Boolean subtractions seem very intuitive at first glance, but if not used advisedly they can do a lot of harm to the mesh's topology. Instead, you could measure the direction of a cylinder's surface towards the profile curves and blend between their closest positions. > bottle.hipnc
  9. Like Sketch ?

    The measure SOP has a principal curvature direction you could use for hatching. sketch.hipnc
  10. Directional bevel ( i.e random gradient displace per piece )

    You can pretty much choose a texture bombing approach to achieve this. Also look into "multiparm blocks" and set their count with the nuniquevals expression, if you really want to define all the curve ramps by yourself. Here is a tutorial: https://odysee.com/@konstantinmagnus:5/houdini-tutorial-texture-bombing-shader:7 projection.hipnc
  11. Convert curve to mesh overlapping mesh

    Hi Rival, you could create a quad mesh from a curve by laying a grid underneath, keep only the quads that touch it, snap the outer points to the curve, smooth and extrude, bevel and subdivide. quad_mesh_from_curve.hiplc
  12. Cut Mesh with Curve

    Hi vusta. Well, this is surely easy to setup, but not exactly light-weight. I was thinking more of something distance-based, that is just capable of cutting straight gaps through polygons. Like polycut, but able to cut through polygons twice if needed. But maybe that's it then.. gaps_polycut2.hiplc
  13. Cut Mesh with Curve

    Here is a polysplit-based procedure to create gaps. Are there any cleaner and more reliable SOPs for this by now? gaps.hiplc
  14. control the shape by ramp

    Cutting a grid with a curve ramp. float scale = chf('scale'); float radius = chf('radius'); int freq = chi('frequency'); float rot = radians(chf('rotate')); matrix3 m = ident(); rotate(m, rot, 2); vector pos = v@P * m; float dist = length(pos); float angle = atan(pos.x, pos.z); float angle_n = fit(angle, -M_PI, M_PI, 0.0, 1.0); float shape = chramp('shape', angle_n * freq); f@dist = (dist - radius) - shape * (scale - radius); cutting_grid.hiplc
  15. Scale down UV's per island pivot point

    Hi Ognjen, in some cases I like to pull my UV coordinates to world space to treat them like usual geometry. But it works with uv transform, too. Perhaps there are even expressions that consider groups and attributes so we can avoid for-each-loops. islands_to_pixels.hipnc
  16. Heart Beat Vex

    Hi Max, you are probably better off by drawing the function as a ramp curve and displace the mesh along its normals. float f = chf('freq'); float s = chf('scale'); float t = @Time * f; float disp = chramp('cardio', t); v@P += v@N * disp * s; If you upload the heart mesh, perhaps someone can setup a quick vellum simulation, too. heart_rate.hipnc
  17. Weathering texture tool

    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 :
  18. Weathering texture tool

    Thank you. Calculating the emission map takes just a few seconds. The actual render time is not really affected.
  19. Weathering texture tool

    A caustics map generator rendered out in Karma using intersect() and refract(). caustics_map.hiplc
  20. How handle this mushroom shape procedurally ?

    I have updated the plant generator a bit. It contains a few examples of modeling growth. seashell.hiplc
  21. Applying Scales to Mesh Surfaces

    Two rather short tutorials showing a simple approach on covering mesh surfaces with scales: Houdini file and discussion here:
  22. Create point in center of each surface

    Just take a primitive wrangle: addpoint(0, v@P);
  23. Control width per box

    Hi yujiyuji, just set the width attribute on the points before copying, and set the wire radius to $WIDTH polywire_width.hipnc
  24. Dual mesh to Voronoi mesh

    You could look into displacing a high-resolution mesh with voronoise in a point VOP. For the time being, here is a way to populate a surface with real scales. scales.hiplc
  25. Plus button for dynamically adding parameters

    A way to dynamically set the number of multiparm blocks based on the number of unique primitive classes: nuniquevals('../classes', D_PRIMITIVE, 'class')
×