Jump to content

konstantin magnus

  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


konstantin magnus last won the day on November 11

konstantin magnus had the most liked content!

Community Reputation

409 Excellent

About konstantin magnus

  • Rank
    Houdini Master

Contact Methods

  • Website URL

Personal Information

  • Name
    Konstantin Magnus
  • Location
    Stuttgart, Germany

Recent Profile Visitors

6,514 profile views
  1. Custom Raytracer in COPs

    Here are the single passes for now:
  2. Custom Raytracer in COPs

    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
  3. horizontaly strict subdivisions

    In case you wanted truly horizontal greeble, you could put a clip SOP into loops on all primitives. Keeps you UVs intact, too. horizontal_greeble.hipnc
  4. horizontaly strict subdivisions

    Hi Zunder, you could also sort and skin randomly positioned lines. grid_random.hipnc
  5. Roof Modelling difficulty

    Never mind, you can check if the point has three neighbors, otherwise it does not move the point. if(primvertexcount(0, i@primnum) == 3){ int pts[] = primpoints(0, i@primnum); vector pos = 0.0; int pt_move = -1; foreach(int pt; pts){ if(inpointgroup(0, 'outer', pt) == 1){ pos += point(0, 'P', pt); } else{ pt_move = pt; } } if( neighbourcount(0, pt_move) == 3){ vector pos_avg = pos * chf('shape'); setpointattrib(0, 'P', pt_move, pos_avg, 'set'); } }
  6. Roof Modelling difficulty

    Hi tmac, you can move the internal point of a triangle to the border by applying the average position of its two other points to it: // in a primitive wrangle if(primvertexcount(0, i@primnum) == 3){ // make sure it's a triangle int pts[] = primpoints(0, i@primnum); // collect all points of the triangle vector pos = 0.0; // set a initial position value for summing up the other two points positions later int pt_move = -1; // set a initial point number for the yet unknown inner point foreach(int pt; pts){ // run over all points of this triangle if(inpointgroup(0, 'outer', pt) == 1){ // ask whether this point is part of the outer group pos += point(0, 'P', pt); // add its position to the position sum from line 3 } else{ // if the currently processed point is not part of the outer border.. pt_move = pt; // .. define it as the inner point thats supposed to be moved.. } } vector pos_avg = pos / 2.0; // .. to the average position of the other two points. setpointattrib(0, 'P', pt_move, pos_avg, 'set'); // apply the new position to the inner point. } Rising the roof can be done without promoting the polyframe`s egdedist attribute, simply by calling the vertex attribute within a point wrangle: v@P.y += vertex(0, 'edgedist', i@vtxnum); roof.hipnc
  7. Vector not inverting when hitting surface

    The reflect() function also works in SOPs: reflect.hipnc
  8. Copy to points - help randomly rotate donut sprinkles

    Have you looked into this? It includes a VOP solution that simply creates a cross product of normals and random vectors..
  9. Procedural Modeling: Donut Tutorial

    Hi Ben, that's a fantastic result! About the sprinkles: I honestly did not expect you guys to have such in depth knowledge about the baking business! Guess I have to do way more research next time ; )
  10. nail polish texture

    Put the noise into a modulo to repeat it and feed this into a color ramp. noise_ramp_modulo.hipnc
  11. Make line length match width of object directly underneath

    The facet node removes those inline points for you. line_intersect.hipnc
  12. Getting Objects to spawn on the Normal location

    Hi Ahmet, just to confuse you a little bit more, here is the definite answer ; ) use addpoint(), prim_normal(), setpointattrib() and removeprim() in a primitive wrangle: int pt = addpoint(0, v@P); vector nml = prim_normal(0, i@primnum, vector(0.0)); setpointattrib(0, 'N', pt, nml, 'set'); removeprim(0, i@primnum, 1); Out of curiosity: Hasn't this already been solved in your old threads? Another thing: You keep posting in the wrong forum section: 'Education' is for posting tutorials and learning resources. Your questions belong to 'Modeling'.
  13. Clustering Objects individually

    Add this before the break: s@name = 'cluster_' + itoa(pt);
  14. Automatically fix mesh tunnels/holes

    You could try to fill the missing pieces with inverted space carving (left) or by re-projecting depth maps (bottom) or rather their tracing curves (right).
  15. Clustering Objects individually

    You can cluster per piece by making sure copy numbers are matching between primitives and cluster points. // primitive wrangle int pts[] = nearpoints(1, v@P, 1.0); i@cluster = -1; foreach(int pt; pts){ if(point(1, 'copynum', pt) == i@copynum){ i@cluster = pt; break; } } voronoi_per_piece.hipnc