[Sidefx-houdini-list] using soho to generate ifd data for shopTypes. Then injecting a mantra IFD with the shaders from disk.

nicholas pliatsikas nicholas.pliatsikas at gmail.com
Fri Oct 7 12:13:58 EDT 2011


Hey guys

Ive got a few questions about using soho and modifying how the shader
assignment/ifd generation of shader information is used.
Just to give you a little history on the problem we are attempting to solve,
its quite simple.

We are using instances pretty heavily on one of our projects, we are also
using our standard ubershader with those instances, which has a massive
amount of shader parameters.
This seems to not work very well when generating IFDs, specifically it takes
a very long time to generate them so we are consistently hitting a mega
bottle neck.

So I began investigating ways of optimizing things. During a quick search
online I discovered a great Russian site that has a brilliantly simple
solution for removing the need to generate instances all the time during IFD
generation.
http://www.2d3d.by/tools/22/
or in english
http://translate.google.co.uk/translate?sl=auto&tl=en&js=n&prev=_t&hl=en&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fwww.2d3d.by%2Ftools%2F22%2F&act=url

Basically that tool allows you to write out an IFD per frame for all your
instances, this file is then added to a parm "vm_ifd_code" on any empty geo
and it will inject the instance ifd data into your renderable IFD. Very
clever :¬)

Now my issue with that is simple, it would be far more optimal if it was a
per frame export, yes its better then rendering IFDs with instances every
time. But we also have regular animation updates, and it does take time to
export for that also.

The 3 valid options I can see is to create a similar setup to the above but
rather then exporting the IFDs for the instance object is to export a file
that contains just the shader information for one frame. Then add a parm
"vm_ifd_shader" that would load this in instead of recomputing the shader
everytime.
Ive not really messed with soho before. Im unsure how i would go about that?
so any tips would be great.

Or instead of injecting it during ifd generation, maybe i could inject it
using a python filter, as long as i can access the object name that im
adjusting the surface for i can do that.

So for the above i guess im asking, how can i generate the shader ifd
information using soho? Is it possible to patch soho to pick up the new parm
and assign that as the shop data for each instance?

And how do i access the object names using python filtering?

The last possibility would be to cache one frame of IFD for the objects we
are instancing then reuse that IFD data with the instance transforms, sounds
like the hardest of all though

Any help with any of the above would be awesome :¬) Its not really
documented much from what i can see either..

Maybe someone has a better solution for the above issue?

Thanks in advance especially if you have read this far.
Cheers
Nick



More information about the Sidefx-houdini-list mailing list