Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by DonRomano

  1. Skin SOP, shift pairing

    As far as I know, you can't shift or change the parametric coordinates of a primitive. You can try to play with a convert sop (convert the curve to mesh and play with the parameters) before skinning, but it's only to sample more or less points on the u and v of the curve to add more division to the skinned mesh. If you find how to shift the parametric of a curve let me know !
  2. Few tips for volumetric lighting with redshift : - Apply a material to the tint shader of the fog (../redhift_rop/redshift/volumetric scattering) and plug your nodes to the volume output of your shader, this allows you to add noise to the fog and/or any other operation you want (like for example get the camera position and create a gradient from the camera position to remap the fog density based on the distance from the camera to get the desired effect) - Use gobo shaders in your spotlights to get better god rays. It's pretty easy to create some gobo maps in photoshop with textures and filters - Create your own volume effects in sops with volume vops, it can be very cool to have some slightly moving volume just on top of the seabed to simulate water flowing and moving sand grains During the week-end if I have time I may help you, do not hesitate to reach me out Cheers,
  3. Filling an crate with boxes

    Another option you have is to use a divide sop with bricker, and then two options : - collapse each face to a single point with a for loop and a fuse, and then copy box to each point - extrude each face to get a cube (procedurally it can be done by measuring the length of one side of the face and feed this into the extrude distance)
  4. You may add a seabed to add depth to your ocean and make it believable, and also work the lighting (you can add godrays, fog) and rework the shading of your water surface. Look at some reference ! Here we see clearly how gradually the "fog" blurs and hide the seabed and the ocean surface gradually. The motion looks good to me, but adding an environment (quixel is your friend ) may hugely imrove your render ! Cheers,
  5. You can also use the fit01() function to add more control over your randomness : fit01(rand(detail("../foreach_begin_metadata1", "iteration", 0) + ch("seed")), ch("min_value"), ch("max_value"))
  6. Spider web ground cover

    Make some cloth simulation and replace your cloth with your spider webs (using uv projection or using the cloth as geo to generate the web procedurally), or model some webs on top of the geo you want to drape and then simulate it as cloth, and it may cover the object you want.
  7. Continuous Flip Emission in Houdini 18?

    Setup a volume source node in dops pointing to your flip source in sops, instead of using the flip object as source.
  8. Procedurally split faces

    Hey guys, it's me again, I have another "complicated" question : is it possible to procedurally split faces with vex ? I'm modeling roofs, and I needed to split the top faces to get to and be able to get a triangle shape (by translating the created point on the Y axis). The edge divide sop makes a wonderful job, but sometimes it doesn't cut faces properly (it's very rare but very annoying). For now, I detect the bugged faces by counting the vertices on each face, and if one has 6 vertices then it's a bugged face; but I don't know how to split them procedurally. One method that came to my mind was making a python script that creates a polysplit node for each face with the split coords but it's not very efficient.. If anyone has an idea ! Cheers, edit : added a screenshot for a better explanation!
  9. Vellum POP Color

    Just use instance on points sourcing method, and set up a random attribute on each frame that you get back in dopland for the simulation vellum_rand_color.hipnc
  10. You can call the attribute using @someattribute in the radius parameter of the polywire node, or you can copy/paste the radius parameter of the curve to the polywire one.
  11. vector pos = point(1, "P", @ptnum); float mix = ch("mix"); @P = lerp(@P, pos, mix);
  12. So I've investigated more tonight and finally I just don't have enough ram to fit the displacement calculation, even with 64 gigs i run short. I'll render the displaced ocean on a grid and the fluid itself on different passes and i'll make a bit of comp magic ! Cheers,
  13. Hey guys, I'm facing a problem when I want to render my extended ocean. Mantra crashes during the displacement creation process, and I'm pretty sure it's not an hardware issue (Ryzen 2700X, 64 gb ram). The output mesh is pretty bizarre : I have a surface created under the mesh when it should be flattened and so there should be no surface here : I dont know what's causing this, but I'm pretty sure that this makes mantra crashing everytime. I tried using a grid instead of the mesh and it's working. I think that what's causing this issue is that when I simulated the fluid there was no particle under the collider and so it results in this weird mesh, I'll try to simulate again with a larger particle layer to see if it solves something. Here are the meshing parameters : I can attach the file if needed but as there are heavy caches that needs to be calculated it may bothers when looking for the bug. Cheers,
  14. So after investigating more I think I have too much polygons and mantra crashes when calculating the displacement. The fluid is a poly soup with 2.4 millions points and I thought my computer will be able to render that easily. I turned off true displacement on the ocean shader and it's working nicely. Cheers, Edit : without true displacement, it's ugly as hell, and I've still not managed to fix the crash. If anyone has an idea about how to solve this, I'll be glad to read it
  15. Procedurally split faces

    Thanks for the answer, very cool, didn't thought about that as I was blocked on just fixing the non-cutted faces and totally forgot that I could split all the faces like this instead of using the edge divide. Anyway, I found a solution to fix this, the code goes into a detail wrangle in a for loop over each bugged face : int pts[] = findattribval(0, "point", "bugged", 1); i[]@pts = pts; int p0_ = pts[0]; int p1_ = pts[1]; int in(int target; int array[]) { //iterate through list to find if a item is in or not int found = 0; foreach(int a; array) { if(target == a) found = 1; else found = 0; } return found; } void splitFace(int p0_, p1_, prim0) { // create neighbours pairs int p0[] = neighbours(0, p0_); int p1[] = neighbours(0, p1_); int x0_ = p0[0]; int y0_ = p0[1]; int x1_ = p1[0]; int y1_ = p1[1]; int x0[] = neighbours(0, x0_); int y0[] = neighbours(0, y0_); int x1[] = neighbours(0, x1_); int y1[] = neighbours(0, y1_); // create arrays int array1[], array2[]; //array 1 if(in(x0_, y1) == 1) { setcomp(array1, x0_, 0); setcomp(array1, y1_, 1); setcomp(array1, p1_, 2); setcomp(array1, p0_, 3); } if(in(x0_, x1) == 1) { setcomp(array1, x0_, 0); setcomp(array1, x1_, 1); setcomp(array1, p1_, 2); setcomp(array1, p0_, 3); } //array 2 if(in(y1_, y0) == 1) { setcomp(array2, p0_, 0); setcomp(array2, p1_, 1); setcomp(array2, y1_, 2); setcomp(array2, y0_, 3); } if(in(y0_, x1) == 1) { setcomp(array2, p0_, 0); setcomp(array2, p1_, 1); setcomp(array2, x1_, 2); setcomp(array2, y0_, 3); } setdetailattrib(0, "a1", array1, "set"); //debug setdetailattrib(0, "a2", array2, "set"); //debug // create polys removeprim(0, prim0, 0); addprim(0, "poly", reverse(array1)); addprim(0, "poly", reverse(array2)); } splitFace(p0_, p1_, 0);
  16. Cascadeur

    Truly amazing !!
  17. I finally found a pretty simple solution : - iterate through every face of the mesh (before becoming lines it's a ring of polygons) - keep the up and bottom lines (like the screenshot before, but here it's for every face, and not all of them like before) - compare the ptnum "sorting" between the top and bot. line : - if the "sorting" is the same (i.e the ptnum are "equal" from left to right or inverse") then the u coord is going in the same direction so I can use it to interpolate points with the same technique as before - if the sorting is inverted, the u coords are going in an opposite direction, so I just have to invert it when I interpolate the points - resample points on the bottom line and then interpolate them on the top line using primuv() with the u or the inverted u Works really well !! (if someone needs, I can make schemes but I don't have photoshop at work so i can't for now ) Cheers,
  18. Hey guys, I'm working on some procedural tools and I need to add points on 2 primitives (they are approximately the same) to then add polylines for each pair of points (to make some grooves like there is on haussmannian building rooftops). This screenshot may help to understand : The thing I do for now is resample the bottom prim, and then use primuv() to sample the pos based on the @curveu (or u in the screenshot) attribute on the upper prim, and for the line I have a Add node -> by group -> by attribute, and it works like a charm; until the 2 primitives have different parametric coordinates. Sometimes it have offset, or even it's inverted, and the points aren't interpolated as I want. So, I wonder if there is a way to copy the uv coordinates from one primitive to another one, or a better solution to this ! Cheers,
  19. PYRO: attract flame by geometr

    Try to make a velocity field pointing to your geometry. What I'll make : - Pack both source and your geo (like origin and target) - Create a vector between them (target pos - origin pos) - Use this vector to drive your velocity field, or source this vector as the vel attribute in your fire, or use this vector to drive the buoyancy direction in the pyro solver. Good luck !
  20. Basic particle sim questions

    The particles going at (0,0,0) may be some deleted particles in the sim that the instance node try to retrieve and then it just pop some particles at (0,0,0) to keep the @ptnum logic. For instancing use the @id attribute instead of @ptnum attribute, it should resolve this. Regarding you second question, I assume that alembic exports a geometry and not an instance, so Blender reads geometry and not particles, so I guess that's why you have multiple objects. You should export particles from Houdini and then make your instancing in Blender rather than what you're currently doing, the alembic will be lighter and you'll have real instances instead of thousands of geometry objects. Cheers,
  21. Add tools to shelf from external file

    Make a folder with your .shelf file (the one you have in $HOME/toolbar) and put this in the houdini.env : HOUDINI_TOOLBAR_PATH = "D:/Path/To/My_Houdini_Tools/Shelves";& In theory it should work; Or you can copy your .shelf file in the /toolbar folder in $HOME. Cheers,
  22. Python error !

    Your code should look like this : node = hou.pwd() geo = node.geometry() # Add code to modify contents of geo. # Use drop down menu to select examples. for prim in geo.prims(): path = prim.attribValue("path") newpath = path[:20] Prim.setattribvale("path",newpath) When you use a for loop or an if statement, you need to indent the block of code you want to execute within this loop. #quick example : create a matrix with each point position import numpy as np node = hou.pwd() geo = node.geometry() pts = len(geo.iterPoints()) all_pos = np.zeros((pts, 3)) i = 0 for pt in geo.iterPoints(): #code i want to execute in the loop so I indent it all_pos[i, 0] = pt.position()[0] all_pos[i, 1] = pt.position()[1] all_pos[i, 2] = pt.position()[2] i += 1 #my loop is finished so print all_pos Hope you'll understand, Cheers
  23. You can instance vdb clouds. It'll take less memory and you'll be able to render more of them. Make a few different models and instance them with a point cloud and then you're good to go ! With a RTX 2080 I've been able to render billions of voxels with instancing in redshift, so I assume if you render with mantra it'll be able to handle many voxels if they're instanced !
  24. Maybe this can help you : https://www.sidefx.com/docs/hdk/_h_d_k__u_s_d_hydra.html Also this : https://www.sidefx.com/docs/hdk/_h_d_k__image.html I quicly went through the example files but found nothing interesting for you. Good luck,
  25. bind vector array

    You need to set your attributes to primitives and not points. I guess Shop is looking for prim attributes and not point attributes by default. To get it working with points, create your material inside a MatNet and it will look for points attributes, at least I've tested it and it's working. Cheers,