Yep it can be. If you want to trigger the evaluation by rendering instead of through a script, then having an empty mesh might make a difference, but it shouldn't as the renderer still has to query the empty geometry to find out if it is empty, forcing the evaluation.
On Wed, May 6, 2015 at 1:54 PM, Eric Turman <[email protected]> wrote: > Thanks for posting your workaround Leonard. I haven't had a chance to > check out your solution but can the geometry even be an empty polygon > object? > > On Wed, May 6, 2015 at 5:32 AM, Leonard Koch <[email protected]> > wrote: > >> The solution to this problem is to have the splice operator output onto >> the PolygonMesh port of a dummy object, one that doesn't have anything to >> do with the cloud we're pulling the data from. To then force evaluation in >> a session without a viewport we just need to access the geometry of that >> dummy object through a script. For Example: >> >> >> Application.LogMessage(Application.ActiveSceneRoot.FindChild("Dummy").ActivePrimitive.Geometry); >> >> Accessing the geometry forces the evaluation of the spliceOP because the >> geometry of the dummy is its output. Evaluation of the spliceOP causes the >> icetree on the pointcloud to be evaluated and because the operator lives on >> a different object the full icetree can be evaluated before the spliceOP >> pulls data from it, which avoids the error of pulling the ice attributes >> when they haven't been set yet aka "Invalid offset specified while >> extracting data from this attribute". >> >> I hope this helps somebody should they stumble upon the same issue. >> >> -Leonard >> >> On Wed, May 6, 2015 at 12:23 AM, Mathieu Leclaire <[email protected]> >> wrote: >> >>> Yeah, we had the same problem but for us it was for rendering. We had >>> put our SpliceOp on a Null and since Arnold was never pulling the null >>> data, the operator was never evaluated and it didn't render. So we put the >>> Splice Op on a mesh, a very tiny sphere that was being passed to Arnold so >>> the SpliceOp was then evaluated. That worked for us, but I've been >>> wondering if there's a better way to force the evaluation of the SpliceOp >>> in Batch mode. Let us know if you find anything better, but you could try >>> something like that. Put the SpliceOp on an object and force a render of >>> that object (render a temporary black frame if you need to) and that will >>> pull the SpliceOp evaluation and do what you want it to do. It's not the >>> most elegant solution, but it's an idea worth trying I think. >>> >>> -Mathieu >>> >>> >>> On 05/05/2015 6:04 PM, Leonard Koch wrote: >>> >>> Thanks Jason. >>> Yeah that is interesting information. I had already figured that part >>> out though (see my response to Renaud). >>> It is very neat though to see it all described in detail. >>> >>> We're now having this weird issue of splice not being able to pull ice >>> attributes when forced to evaluate this way. >>> I will report back here once I have that sorted out. >>> >>> On Tue, May 5, 2015 at 8:31 PM, Jason S <[email protected]> wrote: >>> >>>> >>>> On 05/05/15 9:15, Leonard Koch wrote: >>>> >>>> We're running splice in Softimage to render out a pointcloud using a >>>> renderer written in KL. >>>> >>>> >>>> Sounds cool! >>>> >>>> Would this help? (see related tip) >>>> from here: >>>> http://softimage.wiki.softimage.com/index.php?title=Custom_Operators_%28XSISDK%29#Forcing_an_operator_to_update >>>> >>>> Forcing an operator to update >>>> >>>> A common scripting problem is that a scene that works well in the UI >>>> may not work properly when processed via a script, especially when running >>>> in batch mode. This happens most frequently when dealing with simulation >>>> situations such as Syflex, Hair, Particles or export of animation or with >>>> Custom Operators. >>>> >>>> The reason is because XSI is highly optimized and does not call the >>>> update method of an operator unless something "pulls" the objects that the >>>> operator outputs too. In other words, XSI does not generate data unless it >>>> is asked for. This *pull* often occurs when the object is drawn on the >>>> screen because XSI wants to determine the exact accurate visual >>>> representation of the script. The result is that an operator may have its >>>> inputs changed, which puts it into a *dirty* state, but not >>>> automatically update itself. >>>> >>>> Fortunately XSI is not dependent on its UI, so other scenarios, >>>> including the SDK and rendering can also cause a "pull of the scene graph". >>>> For example if an operator modifies the geometry of an object, then any >>>> SDK code that retrieves the geometry will provoke the necessary Updates. >>>> >>>> So a script that wishes to perform some sort of batch simulation or >>>> animation export should be sure to access the affected objects using the >>>> SDK at each frame change. >>>> >>>> *Related Tip: *Some custom operators that run simulations need to be >>>> dirty each time the frame position changes. >>>> Use the CustomOperator.AlwaysEvaluate property to establish this >>>> behavior. >>>> (The older workaround was animate a parameter of the operator. This >>>> parameter could be hidden and just served the purpose of making the >>>> operator dirty at each frame) >>>> >>>> >>>> >>>> On 05/05/15 9:15, Leonard Koch wrote: >>>> >>>> We're running splice in Softimage to render out a pointcloud using a >>>> renderer written in KL. So the renderer lives in an operator on the >>>> pointcloud. >>>> >>>> When we open this scene using xsibatch the splice operator doesn't get >>>> evaluated. >>>> >>>> Just like any other part of the scene wouldn't. Because it doesn't >>>> have to, because it isn't displayed anywhere. >>>> >>>> Is there a way to force softimage to evaluate its graph without a >>>> viewport? >>>> >>>> Would really appreciate some input on this. >>>> Thanks! >>>> >>>> -Leonard >>>> >>>> >>>> >>> >>> >> > > > -- > > > > > -=T=- >

