Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

Everything posted by Memo

  1. I have a flip + whitewater sim which I've cached with all properties, now I'm slowing it down 4x (i.e. timewarp frames 1...6000 stretched to 1...24000) and I'm using timeblend (i.e. cache -> timeblend -> timewarp -> NULL_OUT) Most of it is working, but for some reason there are some artifacts, some (very few) particles are not being interpolated. You can see what I mean in these videos (I'm rendering as seq of tiff with alpha and I've tried 3 diff alpha matting methods -ignore, straight, premult - and it's noticable on all). https://www.dropbox.com/sh/wo2fm2qjd87vhbw/AACkLgoOCqFzehwz8pLyLEfGa?dl=0 (especially obvious when watched frame by frame). in the link above I've also included a tiny segment of my raw data and a minimal hip file which shows how I'm doing the timewarp+timeblend I have no idea what this is, or even how to debug it. Any ideas welcome!
  2. Hi Netvudu, thanks for the reply. yes reseeding is disabled. Also the artifact doesn't look like a reseeding issue. It's not that I get 'occasional pops'. Instead, very small clumps of particles are not being interpolated. instead they are moving every 4 frames (you can see this in the videos - or directly in the hip). I can't figure out what it is about those clumps of particles that make them not interpolate. I've had a look at the geometry spreadsheet (or whatever it's called these days), and I can see my particles have a class attribute, and have values of 1 and 2. I've tried isolating class 1 and class 2, and both classes exhibit the same behaviour (i.e. tiny clumps in both classes of particles don't interpolate). I don't know how else to debug the problem.
  3. Hi All, I just opened up a hip I had made with H13 a few years ago which involves a simple flip sim with whitewater, you can see a render here https://www.dropbox.com/s/7dofebetwftrwia/waves_foam_2_cam1_halfspeed_60fps_40Mbps.mp4?dl=0 (this is just the whitewater foam) I have the cache of the raw flip output by itself, and I'm using that to feed into the whitewater sim. When I generate the whitewater, the results are very different to what I had before (I still have the cache of the original whitewater too so I can compare). What I'm observing is that no whitewater particles are going into the body of the fluid, instead they are just disappearing instantly and staying around the edges of the fluid. There seem to be other weird artefacts that I can't put my finger on (bits of whitewater particles appearing and disappearing instantly) I've tried some of the shelf tools for waves etc but I have no comparison since I don't have H13 installed anymore. But the shelf wave tank also looks like the whitewater is mainly around the edges and surface and doesn't sink into the fluid with forces. I am downloading H13 again to compare, but I was wondering if this is a known issue, or if a setting has changed that I can't find or have forgotten about!? I'm on Indie edition btw.
  4. Is whitewater broken in H14.0.444

    Thanks Marty, I didn't know about those journals, I'll keep an eye out for them! Unfortunately none of those mentioned issues seem relevant. I.e.I tried enabling the Jitter Birth Time and increasing Velocity offset as mentioned, but it didn't address my issues.In fact I could hardly tell the difference. for those that are curious, here are the two sims overlaid, the dark particles are my original cache from a year ago, the bright particles are a new whitewater sim, with the same hip file but opened in H14, and using the same flip cache as I used to generate the whitewater a years ago. You can see they're dramatically different https://www.dropbox.com/s/ls2ne63xpi6ihc3/H14_whitewater_problem.mp4?dl=0 note that there seem to be more random noise on the new sim. I don't know if that's new, or just magnified to avoid the dreadful dropbox video compression you may need to download the video.
  5. Probably very simple, but I can't figure out how to control the local coordinate system for polyextrude. I.e. point control over in what direction to extrude the points. I'm setting the point normal, but it has no effect. If I use a particle system, connect those with add, and polyextrude, the extruded faces are completely static; however if I use the Trail SOP, the direction of the polyextrude is changing every frame. How can I control it? Simple HIP attached. trail_polyextrude.00015.hipnc
  6. Is there a way to get a super fast render out of Houdini?, Kind of like a flipbook, but I'd like to queue them etc Basically I have a number of shots setup in my scene, cameras, takes, bundles etc. I've got a bunch of scripts and ROP nodes setup to render them all, but first I'd like to get a super draft version output so I can do a preliminary edit, make sure all my in/out points are ok, cameras are good etc. I don't want any shadows, lighting, AO etc. I've played with everything mentioned on here, removed reflections, refractings, shadows etc, (couldn't find how to get rid of AO, I think it's embedded in the algorithm), brought samping down to 1, turned off the ray variance, tried raytracing vs PBR vs micropoly. I removed everything I could and exported 640x360, until basically all I was getting was almost a bunch of colored noise that resembled my scene. but still I can't get my rendering under 3-4 seconds per frame, and with thousands of frames to output, that's still hours to wait. I've also tried different files and encoding / compression (or lack of) to see if that's the bottleneck. But even uncompressed tiff (about 300KB per frame writing to an SSD) was at 3-4 seconds per frame. All of my geometry is cached, when I press to do a flipbook it speeds through them at realtime speed so it's nothing in my scene either. In fact the quality in the opengl rendered is far good enough for my needs, but I have 36 shots and to keep exporting flipbooks manually and individually is a major pain in the arse and unmanageable. So my two questions are: 1. Is there a superfast old school renderer that can just churn out draft renders for previz purposes? 2. failing that, is there a way to queue and manage flipbook generation, ideally somehow linked to all of my mantra nodes (to know what cameras, frame ranges, objects, bundles, takes etc to use)
  7. Super fast rendering

    wow that's perfect thanks!!
  8. Is it possible to programmatically modify a color ramp via python (add / remove / edit keys,values, basis etc)? All I've found is this http://www.sidefx.com/docs/houdini13.0/hom/hou/Ramp which only explains how to read these values, not write to them. The reason I'd like to do this is: I have VEX code which colors my particles based on a number of color ramps. That all works fine. However editing the color ramps can be cumbersome, and I already have color palettes created in photoshop which I'd like to use. I thought my options are: 1. Hand edit the color ramps to reflect the color palettes. Very boring and tedious. 2. Hand enter the RGB values into VEX. Even more boring and retarded. 3. Write a tool which loads the palettes in whatever format, and modifies a color ramp to reflect the palette. The VEX code just references this color ramp. This code would only execute once obviously, I load my palette and bang, the color ramp is up to date. I loved this idea, because I could scatter a bunch of these nodes around, each one a different palette, and the VEX code just references a different node for a different palette. However I can't find how to modify the color ramp so I'm stuck. My plan B is to output the RGB values to number box arrays, and have VEX reference that, which might be faster anyway, but I lose the in between values and the ability to visually tweak the palette in context. Any ideas?
  9. Programmatically modifying a color ramp

    why shiver me timbers that worked! thanks. Can I ask how and where you found this info? I searched all the docs but couldn't find anywhere that you could do this.
  10. creating white water on cached fluid

    It does work fine from cached bgeos, you'll need to feed it: - flip particles - surface volume - velocity field [3] volume So if you cache the raw output from the fluid sim it should work (i.e. do a Dopimport fields, and add your surface and velocity fields to it as well. this is the default setup if you use the shelf tools). If you feed it just the points it wont' work. P.S. you can cache the raw output from the fluid sim as mentioned above (immediately after the dopimport with the surf+vel fields) or what I've been doing is separating the surface volume and velocity volume and points, caching each of them to separate files / folders. In fact reducing the particle count to about 10-20% and then caching them. So I don't get 1GB per frame files but much more manageable. Of course you lose resolution on your particles if you wanted to render them, but I don't so I don't care, and I'm low on space . For the white water sim if you just merge the three streams with a standard merge tool and feed that, it still works fine. Example hip attached. fluid_tests.00004.hipnc
  11. I have a group of points - a cached particle system - and from each point I want to emit two particles, and then triangulate these two trails together like a ribbon. One edge of the ribbon is from ParticleSystemA, the other is ParticleSystemB. (The two particles emitted from each point, I actually have as two separate particle systems, and I'd rather keep it that way if possible. More on this below). So SRC feeds ParticleSystemA and ParticleSystemB, which both have the exact same emission properties and life and everything, so they are always in sync, there is always a point in ParticleSystemA which corresponds to ParticleSystemB, in fact they even share an 'id' attribute, only difference is their behaviour and where they go. I've tried many things, but the closest I've got is: - 'Add' after each particle system, add polygon by attribute 'src_id' (I copy each src particles id into src_id before the particle system, so each trail knows who it belongs to). This connects each of the particle trails into a line. Which is good. - merge the two streams, and add a final add polygon by attribute 'id'. Going into the two particle systems, each src particle has a unique ID. Now when the two streams are merged, there are two particles for each id, which correspond to each other. I want those to be connected. This 'add' SOP does that, and connects them with an edge. But I cannot for the life of me figure out how to make that into a poly! It feels like I need one node to complete this into a surface but I can't find it! I effectively want to create a triangle strip trail per original src particle, which goes: src_point, a[0], b[0], a[1], b[1], a[2], b[2], a[3], b[3] etc. but I cannot figure out how to do it. I've attached a simplified hip file. P.S. The reason why I don't want to mix the two different particle systems into one system is because I have created them as separate tools and they are already cached separately. I can merge them if that is the only way, but I'd like to think it is possible to merge the two streams and triangulate. particle to particle trail test stripped.00020.hipnc
  12. Hey thanks for the reply. That's an interesting idea. You're basically saying use existing geometry and just deform it. It sounds like it should work. My source is quite dynamic, and there are thousands of src points, so it's going to be building up a lot, I'm not sure how it will affect performance if I'm also dynamically creating thousands of grids and deforming them. I'll give it a shot on a small scale to see if I can even do it.
  13. Just wondering if you got anywhere with this? Is it possible to hack / mod houdini for it to work properly? I've got my houdini setup with Sublime Text (and this great VEX package for it) but currently the only way I've found it works is: - select your code field in houdini (e.g. wrangle snippet) - press alt-e to open the code window - click on the 'external editor' button on the code window - edit in sublime - close the window and save on exit - click apply in the code window, and only then does it apply. Obviously this is ridiculously unusable. It's easier to just copy paste from sublime into the snippet field! (Which is what i'm currently doing). Surely it can't be too difficult to hack this in to work properly?
  14. I have a cached number of points, and I'd like each one to emit particles at a relatively constant rate (30fps, i.e. one particle per source point per frame). I'm thinking if I feed the whole thing as a POP source, and dynamically control the birth rate to match point count it should be fine (the incoming point count isn't changing drastically. It sticks to one number for a while, and then changes to another set after a few seconds, and then another etc, so minor inaccuracies at the point of transition is fine). My challenge is to find a way of getting the number of points into there! According to the documentation there should be a local variable $NPT which is number of points. But I just get 0 when I type that in. I ended up writing the code below (into the Impulse Count parameter) and it seems to work well, but seems overkill just to get the number of points on the current node!. Am I missing some basic syntax on the $NPT? sop_path = hou.parm('soppath') sop_node = hou.node(sop_path.eval()) point_count = len(sop_node.geometry().freeze().points()) return point_count Also any opinions on whether it would be better to use impulse activation with the particle count, or constant activation with particle count * fps? Former seems more sensible to me, but I don't know what's going on behind the scenes so that may not be the case.
  15. if anyone else is wondering the same thing and comes across this post, the answer is: npoints(opinputpath("../", 0))
  16. like the title says, whats the best way to randomly reduce the number of points in a FLIP system POST simulation? (losing the same particles every frame obviously, not different ones each frame). I.e. I have about 10M points simulating, afterwards I want to reduce this down, not sure how much to, probably around 1K-1M, need to have a play. I tried creating an attribute called rndval = rand($ID), and then delete where $RNDVAL<ch("delete_amount") (HSCRIPT). It works alright, but is super slow. I found doing a group and blasting by group is slighty faster, but still painfully slow. I was doing this after the simulation (i.e. import the DOPFields into a geo and do it down the chain there). In my sim I've turned off reseeding, so I've now tried doing the grouping before the sim (my input points are static, just a standard box flip field). There is no ID defined at that point, so I'm grouping on rand($PT) < ch("delete_amount"). THis is now done once at the start of the sim, which is quite slow, and then while the sim is running it's not evaluated so all is good. The cost of blasting alone is quite negligible. This works ok now, but the downside is I can't tweak my theshold post-sim! I.e. the cached data includes the thresholded group! WHat I'd really like to be able to do is cache the sim at full res, and then reduce it afterwards. Is there anyway of doing this that isn't super slow?
  17. Sorry to be bombarding the forum with loads of questions lately, Houdini is pretty big and I'm running into a lot of walls (and I haven't slept or eaten in about 30 hours too). 1. I'd like to create an OTL which generates a bunch of geometry based on a bunch of settings 2. Then I'd like to create a number of instances of this OTL in the root on the scene level (/obj). 3. I'll adjust the different instances to different settings. 4. Then I want to export the geometry from each instance (the OTL has a ROP network inside it). I'm running into two problems: 1. I've linked the export settings to the OTL interface, but when I press the Render or Render Control buttons nothing happens. However if I dive inside the OTL, and go down all the way to the ROP Network, then if I press RENDER on the OTL interface it renders! But i have to be inside the ROP Network otherwise it does nothing. 2. I understand that inside a ROP network you can link nodes and they trigger one another and you can daisy chain renders. But what I would like to do, is arbitrarily trigger the export of two different instances. E.g. I have 5 instance of my OTL in my scene. I play with the settings of them, and then I go off on a break, and I'd like instance 1, 3, and 4 and to start exporting. Is this possible? THey are in separate ROPnetworks, each inside their own instance of the OTL? I've attached a really simplified example of my setup: OTL is at scene level, and contains a geo node, and a rop network. In the root I have bunch of instances. cheers, msaTestRop.zip
  18. Hey man, that sounds perfect! I'll check it out. I'm just trying to figure out best practises on how to structure everything and automate as much as possible. It would be good to catch up pretty soon too, I have a load more questions :
  19. Thanks guys, yea that worked. Sorry I am trying to read as much documentation as I can, but since it's such a goliath piece of software sometimes I don't know what to look for. Interestingly I found the VEX (attribwrangle) to be a lot slower than the VOP. I wondered if it's the pointremoving from within the VEX that's slow, so I tried grouping first in VEX and then Blasting, and that is indeed why it is. Add/removegroup from a pointwrangle followed by a blast is a lot (3x) faster than a removepoint from an attribwrangle. Interestingly wrangleattrib/setgroup is an order of magnitude slower! Also I wondered if passing in external parameters via ch() was slow, turns out that's negligible. My results are below. I ran them a few times and always within a few % of this. P.S. this is for a 1M point grid, running over 100 frames, modulating the threshold sinusoidally and running 5 simultaneous branches so they all get the same input. EDIT: I initially uploaded an incorrect version which didn't have the pointwrangle add/removegroup. Correct version attached. point_delete_tests.00008.hipnc
  20. @mawi, I tried that but doesn't work. Just doesn't remove anything. I even tried just removepoint(0, 'ptnum) or removepoint(0, 5) and nothing dissappears. These docs say it should work in any context. I tried a point wrangle in a normal SOP network. @ranxerox, yes you're right. I think I was comparing against a rndval attribute which already existed on my data.
  21. ah ok thanks. So I still need to read the SOPPath from the parameter. If the source is coming via the POP Networks input, then what can I do?
  22. Sorry yes you're right, I'd simplified my question. Actually I'd like to be able to control how many particles per point per frame there is.e.g. currently i'm playing around with a half or a quarter (i.e. impulse_count = point_count/4). So I can have longer trails with fewer particles. Is there no easier way to get point count? Also my method reads the SOP Path, which obviously isn't ideal since the source may be using the node input.
  23. I'm creating an OTL, and in the OTL I have a ropnet with a bunch of geometry render nodes. What I want, is from the main interface of the OTL a user can choose an arbitrary name, click Render and all of the geometry sequences are exported one after the other into a folder with the arbitrary name, into subfolders with fixed names. I've tried a few things and got close, but not as clean as I like. I have a bunch of questions regarding this. e.g. folder structure: - my_arbitrary_folder_name - fluid_raw: contains bgeo sequence for raw fluid data - fluid_cleaned: contains bgeo sequence for cleaned fluid data - fluid_reduced: contains bgeo sequence for reduced fluid data - triangulated: contains bgeo sequence for triangulated fluid data etc. So on my ropnet interface I have: - a string parameter called folder_name - a string parameter called full_path which I have entered: $JOB/geo/$HIPNAME/`chs("folder_name")` Then inside the ROP for each of my render nodes I've entered the following into the SOP Path: `chs("../full_path")`/$OS/$F4.bgeo This works pretty well. However if I decide to change the final output filename format (e.g. if I want to do $F5 instead of $F4, or include the $OS in the filename like $OS.$F5) I have to go through all my geometry render nodes, and copy paste my new expression of `chs("../full_path")`/$OS/$OS.$F5.bgeo in there. Ideally that expression would be on the ROP as well, but I couldn't figure out how to do that. Q1. I'd kind of like to write on the parent node (i.e. the ropnet): $JOB/geo/$HIPNAME/`chs("../folder_name")`/$OS/$F4.BGEO And then have this copied as a string to the child nodes (i.e. geometry nodes) and evaluated there. But what happens right now is the $OS is evaluated on the parent node (into 'ropnet1') and comes across as a string. I couldn't figure out any combination of ticks, backticks or apostrophe's to solve this. (See EXPRESSION_EVAL_TEST in the attached file) P.S. I've actually ditched this approach now (see below), but I'm still curious to see what the answer is just for future reference as I can see it being handy. I've ditching the approach above (using $OS), and I'm now collating all of the fixed subnames (entered manually) in the main interface as well, so I enter on my main interface: folder_name: e.g. preset1. folder name where all other subfolders go. I'll change this regularly while playing with different presets. file_name: $F4.bgeo. I'll probably set this once for a project. name1,2,3,4,5: names for each of the sub folders, again I'll probably set this once for a project. Then from this I create: parent_path: $JOB/geo/$HIPNAME/`chs("folder_name")` (e.g. D:/waves/houdini/geo/roptests.hipnc/preset1) And then a full path for each of the subfolders: `chs("parent_path")`/`chs("name1")`/`chs("file_name")` `chs("parent_path")`/`chs("name2")`/`chs("file_name")` `chs("parent_path")`/`chs("name3")`/`chs("file_name")` etc. Q2. How can I automate this for each of the full_paths? Copy/pasting the formula and then changing a number 1, 2, 3, is annoying. Q3. Then in my readfile nodes, I enter the path: `chs("../../full_path1")` `chs("../../full_path2")` `chs("../../full_path3")` and the exact same for the Geometry render nodes in my ropnet. There is still too much copy/paste and manual editing for my liking. I would like to just set an index on the readfile nodes via a custom parameter, and have everything updated, e.g. the equivalent of: chs("../../full_path" + chs("index") ) I got as far as: chs("../../full_path`chs("index")`" ) which gives me chs("../../full_path1" ) which as a string is correct, but obviously that isn't evaluated, as soon as I put backticks around it it breaks (I guess they can't be nested). Is this possible? Also is this the right way to do it? It looks super messy. roptests.hipnc
  24. @cpb that doesn't work for me. But it doesn't matter, i'm just going python everywhere, and writing things out explicitly, it's working so far.
  25. Wow that's amazing! I had no idea VOP SOP were THAT Much faster! Below are my results for 3 methods for reading a 367,161 point particle system from sequence of BGEOs for 50 frames. 1. file read - 4.574s attribcreate rand($ID) - 11.636s delete by expression $RNDVAL<ch("delete_amount") - 34.245s Total (excluding file io) - 45.881s 2. file read - 4.613s attribcreate rand($ID) - 11.473s group by expression $RNDVAL<ch("delete_amount") - 21.887s blast group - 1.003 Total (excluding file io) - 34.363 3. file read - 4.564 VOPSOP: compare rand(ID) < promoted parameter ch("delete_amount"); if so add to group - 0.106 blast group - 0.941 Total (excluding file io) - 1.047 Madness!! interestingly, the VOP random documentation says the return value is 0...1, but I'm pretty sure it's signed. WHen I tried 'if rand(id)<0.5' I got 82K points (out of 367K, exactly a quarter!). However when I mapped it from -1...1 to 0...1 I got 182,849 points (182,849 / 367,161 = 0.498, which is pretty good. Also identical point count to what delete & group return). http://www.sidefx.com/docs/houdini13.0/nodes/vop/random amazing thanks. I'll try and never use expressions again!