Welcome to od|forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.


  • Content count

  • Joined

  • Last visited

  • Days Won


Community Reputation

84 Excellent

About bunker

  • Rank

Personal Information

  • Name Julien
  • Location DD, Vancouver
  • Interests bespoke solvers, volumes, fire, smoke, FLIP, RBDs/Bullet, particles, VEX, Python, lighting, rendering...

Recent Profile Visitors

6,871 profile views
  1. in the polyextrude SOP, in the "Extrusion" tab, turn on "Transform Extruded Front", Transform Space=Global, set Translate Y to your height value.
  2. in a popwrangle: float my_age_limit = 1.0; if(@age>my_age_limit)removepoint(0,@ptnum);
  3. I would add a transform SOP to make your set bigger before it goes to DOPs that way you don't need to change gravity If your mountain is supposed to be 100m in height, make sure it's 100 units first then you can always scale it a bit up/down if you need slower/faster look.
  4. not sure how the source volume work for this, but it's an OTL so you can check the inside... for sink/pump/expand operations I normally use a "Gas Field Wrangle" microsolvers. if you set your "input 1" to a SOP path with a volume then: // load volume float vs = volumesample(0,0,@P); // expand f@divergence += vs * chf("expand_amount"); // sink f@density *= clamp(1-vs,0,1); of course you'd need to adjust the volume values if you're using an SDF/surface field for pump, you'd need to load 3 volumes since it's velocity: float vx = volumesample(0,0,@P); float vy = volumesample(0,1,@P); float vz = volumesample(0,2,@P); vector v = set(vx,vy,vz); v@vel += v * chf("velocity_scale);
  5. I would use a wrangle node, much more flexible and procedural than sculpting by hand what you're after is a falloff distance from some points, that can be done with the "nearpoint" and "distance" functions: scupt_ground.hipnc
  6. hard to tell what the matte shading issue would be without more infos - I never had issues with PRMan or Arnold Anyway to delete particles based on velocity, you should use a wrangle+blast SOP instead, much faster. The Delete SOP is ancient and should be deprecated. wrangle SOP: if(length(v@v)>chf("threshold"))@group_kill=1; blast SOP : group set to "kill"
  7. That's the result of diffusion (what the gas blur does) you'll get more areas of low density over time. Check out the HIP file attached. blur_and_compress.hip
  8. of course, it's a volume compress node that create tiles, nothing weird there check "/obj/smoke_column/volumecompress1/" and can set the "Constant Tile Tol" to zero Also I would reduce the "Quatization Tol" to 0.001 so it's a bit less noisy I muliplied the density display 10x so you can see the compression (frame 250)
  9. You can use Heat difference between two frames so that the heat that disappear gets turned into smoke. pseudo code: density = heat($F) - heat($F-1) You'll have to inject the fire velocity near the flame smoke_source_from_fire.hipnc
  10. The popReplicate updates the particles id so I modified the popSource to create another attribute called "id2" (nodes in red) then itoa() vex and the partition SOP to create groups. hope that helps! bunker_trails_groups.hipnc
  11. A screenshot of the issue or a HIP file would help
  12. can you post a simple file maybe?
  13. You can create a template with coloured nulls, a merge node and refer to that merge node from DOPs: opinputpath("../../inputs",4) : refer to the 5th input of the merge wrap into an HDA and with the onCreated script use the extractAndDelete() Python command (I used a button in my example HIP) hope that helps... dop_template.hipnc
  14. maybe some volumecompress SOP in your setup? you can check in a python shell: for i in hou.nodeTypeCategories()["Sop"].nodeTypes()["volumecompress"].instances():print i
  15. "createNode" returns a node object so you don't need to use node.path() and then hou.node() geo_node = hou.node('/obj').createNode('geo') for i in geo_node.children(): i.destroy() only one file SOP is created by default inside geo nodes so you can simplify further geo_node = hou.node('/obj').createNode('geo') geo_node.children()[0].destroy() weirdly enough, this works too geo_node=hou.node('/obj').createNode('geo').children()[0].destroy()