Jump to content


  • Posts

  • Joined

  • Last visited

Contact Methods

  • Website URL

Personal Information

  • Name

Recent Profile Visitors

2,510 profile views

Kalina's Achievements


Newbie (1/14)



  1. The Advanced Visualization Lab (AVL) at the National Center for Supercomputing Applications at the University of Illinois at Urbana-Champaign is looking for a Houdini artist for an hourly contractor position, expected to be <10 hours per week. The position is remote. The work would involve helping the AVL team create cinematic scientific visualizations of datasets like black holes and stars. Prior visualization experience not required. Please see the attached job description and AVL demo reel to get a sense for the type of work. Apply here: https://forms.illinois.edu/sec/1933699974 Houdini_Artist_Job_Description.pdf
  2. I am trying to resurrect an old version of a Houdini plugin that no longer works with newer versions of Houdini. I've tracked down the issue to a segfault happening in the file $HFS/toolkit/include/openvdb/Grid.h , where the function Grid<TreeT>::setTree(TreeBase::Ptr tree) is checking the type of the tree: tree->type() I can't figure out what could be causing this to segfault. When I print ouf the tree details with tree->print(std::cout, 4) I see that the tree type is "Tree_float_5_4_3", which seems fine? So why would this cause an issue? Anyone have any ideas? The full print output is: Information about Tree: Type: Tree_float_5_4_3 Configuration: Root(1 x 1), Internal(1 x 32^3), Internal(6 x 16^3), Leaf(5,207 x 8^3) Background value: 0 Min value: 0 Max value: 15.9799 Number of active voxels: 4,927,500 Number of active tiles: 5,813 Bounding box of active voxels: [0, 0, 0] -> [299, 224, 72] Dimensions of active voxels: 300 x 225 x 73 Percentage of active voxels: 100% Average leaf node fill ratio: 73.2% Number of unallocated nodes: 0 (0%) Memory footprint: Actual: 11.099 MB Active leaf voxels: 7.443 MB Dense equivalent: 18.797 MB Actual footprint is 59% of an equivalent dense volume Leaf voxel footprint is 67.1% of actual footprint Tree_float_5_4_3
  3. Ditto to what toadstorm said, using packed disk primitives is not much work and it's a game changer. Do it do it do it and it will save you a lot of time and headache. Then writing out the IFDs is much faster and the files are much smaller... So it's less of a commitment to re-run them with a new camera. Otherwise though, depending on how you write them out, IFDs are either plain text or have a text component. You could write a script that parses the text in the files and swaps out camera positions. Not an ideal solution (especially if you're not comfortable with scripting), but it should work.
  4. Thanks for the reply. I guess I wasn't clear enough in my original post - I do want to keep generating IFDs, that is not the problem. I want to change what is written to these IFDs. And, I am already using Packed Disk Primitives. I came up with a hacky solution, still hoping there's a better one. Here it is in case anyone else finds it useful: 1. Write out all the IFDs separately from 3+ out nodes, where each out node is identical, except for a different camera. 2. Use the script below to go through and merge the 3+ IFDs for each frame into one new IFD for each frame. 3. Render these newly-created IFDs rather than the ones created by Houdini. """ Usage: python mergeIfds.py -frames 1-100%2 -baseNames multitest1,multitest2 """ import sys import os frameRange = [1001,1001,1] baseNames = ["multitest1", "multitest2"] basePath = "/fb1/bope/earthscall/ifd/" #Assumes all the IFDs are in this directory, e.g. /fb1/bope/earthscall/ifd/multitest1/multitest1.0001.ifd etc # Get (optional) command line parameters ii = 1 while len(sys.argv) > ii+1 and sys.argv[ii][0] == "-": a = sys.argv[ii] b = sys.argv[ii+1] if a == "-frames": inp = b.split('%') if len(inp) > 1: frameRange[2] = int(inp[1]) if "-" not in inp[0]: frameRange[0] = int(inp[0]) frameRange[1] = int(frameRange[0]) else: r = inp[0].split('-') frameRange[0] = int(r[0]) frameRange[1] = int(r[1]) ii += 2 elif a == "-base": inp = b.split(',') baseNames = [] for baseName in inp: baseNames.append(baseName) ii += 2 else: print "ERROR: Unknown option " + a sys.exit() # Make new directory for the new IFDs if it doesn't exist newBaseName = baseNames[0] + "_combo" if not os.path.exists(basePath + newBaseName): os.makedirs(basePath + newBaseName) # Go through all the frames in the specified frame range for i in range(frameRange[0], frameRange[1]+1, frameRange[2]): padNum = str(i).zfill(4) with open(basePath + newBaseName + "/" + newBaseName + "." + padNum + ".ifd", "w") as outF: # Copy entire first file over, except for the last line with open(basePath + baseNames[0] + "/" + baseNames[0] + "." + padNum + ".ifd", "r") as inF: for line in inF: if not "ray_quit" in line: # this is the last line outF.write(line) # Write a new last line outF.write("ray_reset -l -o -f # }") # Loop through the rest of the basePaths for j in range(1, len(baseNames)): baseName = baseNames[j] isLast = False if j == len(baseNames)-1: isLast = True # Copy the relevant sections copy = False with open(basePath + baseName + "/" + baseName + "." + padNum + ".ifd", "r") as inF: print basePath + baseName + "/" + baseName + "." + padNum + ".ifd" for line in inF: if "Main image from" in line: copy = True if copy: if (not "ray_quit" in line) or (isLast): outF.write(line) # Write a new last line if this isn't the last IFD if not isLast: outF.write("ray_reset -l -o -f # }")
  5. I am using an IFD workflow, and I want to render an identical scene from 3+ different camera positions. I've come across several different ways of rendering these 3+ images sequentially, but that's not exactly what I want. I would like to make 1 IFD file that renders 3+ images from different camera positions. Is there a way to do that? I am working with a large dataset. For easy math, let's say that it takes 10 minutes to read/load, and then 10 minutes to render. Rather than doing three sets of load+render + load+render + load+render (60 minutes), I'd like to be able to do load+render+render+render (40 minutes). I have found that I can use the "Stereo Cam Template" (even though I am not rendering in stereo) to work with two of these cameras to do load+render+render in one IFD file. But how can I do this with more cameras?
  6. Updating from Houdini 16.0.504.20 to 16.0.577 fixed the issue.
  7. OK, I'll try downgrading from 4.9.3
  8. Thanks, but that didn't help. The issue is still the same. A bit more info that may be relevant, though: I am on CentOS 6, which comes pre-packaged with gcc4.4. You may notice that my Makefile points to CXX=/share/apps/bin/gcc ...where I have gcc4.9.3, which I'm trying to use instead. Am I using the wrong gcc version, or pointing to it incorrectly?
  9. I'm using whatever came with Houdini16. Should I be using a different one?
  10. Here is the full problematic code: SOP_Testing.C: #include "SOP_Testing.h" #include <UT/UT_DSOVersion.h> #include <OP/OP_OperatorTable.h> #include <OP/OP_AutoLockInputs.h> using namespace AVL_Testing; PRM_Template SOP_Testing::myTemplateList[] = { PRM_Template() }; void newSopOperator(OP_OperatorTable *table) { OP_Operator *op; op = new OP_Operator("avl_testing", "Testing", SOP_Testing::myConstructor, SOP_Testing::myTemplateList, 0, 0, NULL, OP_FLAG_GENERATOR ); table->addOperator(op); } OP_Node* SOP_Testing::myConstructor(OP_Network *net, const char *name, OP_Operator *op) { return new SOP_Testing(net, name, op); } SOP_Testing::SOP_Testing(OP_Network *net, const char *name, OP_Operator *op): SOP_Node(net, name, op){} SOP_Testing::~SOP_Testing() {} OP_ERROR SOP_Testing::cookMySop(OP_Context &context) { openvdb::FloatGrid::Ptr grid = openvdb::FloatGrid::create(); openvdb::FloatGrid::Accessor accessor = grid->getAccessor(); openvdb::Coord xyz(5,5,5); accessor.setValue(xyz, 1.0); xyz.reset(0,0,0); accessor.setValue(xyz, 1.0); GU_PrimVDB::buildFromGrid((GU_Detail&)*gdp, grid, NULL, "gridName"); // Crashes on this line! // Complains about openvdb::v3_3_0_sesi::math::Transform::Transform(std::shared_ptr<openvdb::v3_3_0_sesi::math::MapBase> const&) return error(); } SOP_Testing.h: #ifndef __SOP_Testing_h__ #define __SOP_Testing_h__ #include <GU/GU_PrimVDB.h> #include <SOP/SOP_Node.h> namespace AVL_Testing { class SOP_Testing : public SOP_Node { public: static OP_Node *myConstructor(OP_Network*, const char *, OP_Operator *); static PRM_Template myTemplateList[]; protected: SOP_Testing(OP_Network *net, const char *name, OP_Operator *op); virtual ~SOP_Testing(); virtual OP_ERROR cookMySop(OP_Context &context); }; } #endif Makefile: CXX=/share/apps/bin/gcc HOU_VERSION = 16.0 DSONAME = SOP_Testing.so LOCATION = ~/houdini${HOU_VERSION}/dso/ SOURCES = SOP_Testing.C include $(HFS)/toolkit/makefiles/Makefile.gnu OPTIMIZER = -g HOUDINI_DSO_ERROR = 2 CPPFLAGS += -fPIC install: mkdir -p ${LOCATION} cp ${DSONAME} ${LOCATION}
  11. I just updated to Houdini16, and all of a sudden this same little code snippet doesn't work anymore. Houdini crashes on the line: GU_PrimVDB* vdb = GU_PrimVDB::buildFromGrid((GU_Detail&)*gdp, grid, NULL, "gridName"); ...with no log or helpful error message, just: undefined symbol: _ZN7openvdb11v3_3_0_sesi4math9TransformC1ERKSt10shared_ptrINS1_7MapBaseEE Deciphering that with c++filt shows that it's complaining about: openvdb::v3_3_0_sesi::math::Transform::Transform(std::shared_ptr<openvdb::v3_3_0_sesi::math::MapBase> const&) ...even though I'm not even using a transform. Any thoughts?
  12. Here is a simplification of my problem: I have two side-by-side volumes, and one of them has voxels that are twice the size of the other's. Or, another way of wording it – I have two volumes that are the same size, with resolutions e.g. 10x10x10 and 20x20x20. When I render the image, there is a seam between the two volumes. This seam is not there if the two volumes were have the same voxel size. How do I remove this seam? Is there something I can do in the shader? seam.hipnc
  13. Some more advanced questions that I have, if you're feeling especially helpful: * How do I render a VDB? * What is the difference between the "RenderMan (rib)" and "RenderMan RIS (ris)" out nodes?
  14. I would really appreciate help with doing the simplest possible volume render using RenderMan in Houdini. I always just get a black image. I think my issue is that I don't know how to set up a volume shader... A sample .hip file, or just telling me which nodes to use, would be very appreciated.
  15. Scripting in python, I can programmatically create a volume sop and then use setVoxel() or setAllVoxels() to fill in the voxels with data. ( http://archive.sidefx.com/docs/houdini15.0/hom/hou/Volume ) How can I do this with a VDB? I thought it should be somewhat similar, but there are no "set" functions I can call. ( http://archive.sidefx.com/docs/houdini15.0/hom/hou/VDB )
  • Create New...