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=-

Reply via email to