Fixing DLL problems


If you ask me, these are all bad ideas:

  • Downloading missing DLLs from some DLL download site you found via a web search
  • Copying DLLs to your system32 folder
  • Copying DLLs from one version of Softimage to another

Fixing DLL problems involves doing some troubleshooting to figure out the root cause of the problem. Often, an error message about a DLL is just a symptom.

For missing DLLs, don’t download the DLL from some dll-download site. Usually a re-install of your software package, or an install of the appropriate redistributable package, will fix the problem.

Copying a DLL from one version of an application to another is a little crazy. You’re just asking for trouble 😉

Scripting FBX export and import


You can use the FBXExport command to create the ExportFBXOptions property, and then use either the OM or SetValue to set the FBX options. For example, this Python snippet creates the FBX property by calling FBXExport( “option” ), and then sets the FBX SDK version (for which there is no separate FBXSetExport command).

si = Application
si.FBXExport( "option" )
o = si.Dictionary.GetObject( "ExportFBXOptions" )
o.Parameters( "FBXSDKVersion" ).Value = "FBX201300"

You can do the same thing for FBXImport with FBXImport( “option” ), but I always got an error, even if the property was created.

si = Application

try:
	si.FBXImport( "option" )
except:
	o = si.Dictionary.GetObject( "ImportFBXOptions" )
	
si.LogMessage( o )

Emitting strands from a polygon cluster


Here’s a simple ICE tree that emits strands from a polygon cluster.
emit_strands
A general technique for these kinds of filtered emissions is to delete the points you don’t want. In this case, we check Cluster.IsElement. The tricky part is that Cluster.IsElement is a bool-per-polygon attribute, so we need to get into a per-point context. To do that, we get the emit location, which is per-point, and then at that location, the value of Cluster.IsElement. Now we’re in a per-point context, and we can use those per-point boolean values to delete points.

Note the use of Not instead of an If. We know IsElement is False for points that were not emitted from the polygon cluster, so we can logically negate it with Not to get True and feed that into Delete Point.

In pseudocode, we do this:

if not( IsElement ) delete point

instead of

if (IsElement == False) then delete point

Of course, for filtering we could just drill down into Emit Strands and set the filter on the Generate Sample Set nodes.
generatesampleset_filter

Adding ReferenceWidgets to PPGs?


It used to be possible to add a ReferenceWidget by calling oLayout.AddItem( “Param”, “ref”, “ReferenceWidget” ) in your DefineLayout. But that was four or five years ago, and it no longer works.

def MyProperty3333_DefineLayout( in_ctxt ):
	oLayout = in_ctxt.Source
	oLayout.Clear()

	# Test some other control types
	oLayout.AddItem( "Param", "txt", "Texture Space" )
	oLayout.AddItem( "Param", "scnref", "SceneReferenceWidget" )

	# Doesn't work
	oLayout.AddItem( "Param", "ref", "ReferenceWidget" )

	# Doesn't work
	oPPGItem = oLayout.AddItem( "Param", "", "dscontrol" ) ;
	oPPGItem.SetAttribute( "UIType", "ReferenceWidget" );

For reference 😉 this is a ReferenceWidget:
ReferenceWidget

And this is how a ReferenceWidget is added in SPDL:

	Parameter "inst_source" input
	{
		title = "Instance source";
		guid = "{5620730D-AEFC-4C4A-B1DF-9377E808E27B}";
		type = reference;
	}
...
	inst_source
	{
		Name = "Source Object";
		UIType = "ReferenceWidget.ReferenceWidget.1"
		{
			filter = "{6B579D20-3DC5-11D0-9449-00AA006D3165}";
			mode = "single";
		}
	}

Screenshots of the week


LKFabric Tutorial 01: Blend Between Shapes

emTopolizer2 experiments

Ski lift compound
by caledonian_tartan
skilift

Squash Stretch Volume Preservation with ICE (Fstretch like)

Using attributes to assign matte IDs
by NNois
matte_IDParticles
Remove every other value from array
by caledonian_tartan
array

Using image xres to drive ICE emission
by Letterbox
xres

emPolygonizer4 Update
by Mootzoid
http://vimeo.com/80782236