I'm confused. Calculating the local tranform of of object relative to another 
is just a matter of matrix inversion and multiplication. But of course you 
already know that, Matt, so I must be misunderstanding something about your 
problem.

Also, have you tried using either the Reinterpret Location on New Geometry or 
the UV to Location nodes? They might avoid the parameterization issues.

If I can find some spare time I might try to knock up a simple demo. Remind me 
which version of Softimage you are currently using?

gray

From: softimage-boun...@listproc.autodesk.com 
[mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Matt Lind
Sent: Wednesday, May 15, 2013 02:26 PM
To: softimage@listproc.autodesk.com
Subject: RE: custom ICENode - questions and request for example source code

That's what I was afraid of.

I remember your findings from a while ago, which was part of my incentive to 
pursue this route.  500ms vs. 20ms is quite significant (2500%). In my case it 
would be the difference between acceptable performance and unacceptable 
performance.

I'm OK with having to break this down into a small handful of nodes (~10), but 
I'm not OK with having to use 300 or so as is currently the case.

On the kinematics front, I'd like to compute the local transform of one object 
relative to another and spit out the result as a 4x4 matrix.  That alone would 
eliminate 50 nodes from the tree for each instance which the functionality is 
needed.  Another node to convert a UV location from non-uniform to uniform 
parameterized space would eliminate a significant number of nodes too, and 
that's really the bottleneck at this point because doing searches and reverse 
lookups using the factory nodes is quite cumbersome and impractical.



Matt




From: 
softimage-boun...@listproc.autodesk.com<mailto:softimage-boun...@listproc.autodesk.com>
 [mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Ahmidou Lyazidi
Sent: Wednesday, May 15, 2013 3:07 AM
To: softimage@listproc.autodesk.com<mailto:softimage@listproc.autodesk.com>
Subject: Re: custom ICENode - questions and request for example source code

>From my small experience about this, you can't make a custom topology or 
>kinematics "node", you make a node that abstract the more or less complex  
>computation, then you feed the topology nodes (or a matrix in the case of  
>kinematics).
As you stated you can't use locators, or location queries in a custom ice node, 
so if you need them the workflow is to break you ice node in smaller parts.
About the preformance sometimes it's faster, sometimes quite the same. I made a 
parallel transport frame node, the gain was only 15% but the setup faster.
This node seems to perform way faster:
http://shaderop.com/2011/07/cubic-bezier-curve-node-for-softimage-ice/index.html
A


-----------------------------------------------
Ahmidou Lyazidi
Director | TD | CG artist
http://vimeo.com/ahmidou/videos

2013/5/15 Matt Lind <ml...@carbinestudios.com<mailto:ml...@carbinestudios.com>>
well, let's answer the questions first:

1) Does anybody have source code they are willing to share for custom ICE Nodes 
that deal with topology and/or geometry?

2) Does the lack of reference, location, and execute ports for custom ICE nodes 
mean I cannot cast a location search from inside an ICE node?



To answer your question:

Imagine two nulls and two NURBS Surfaces.  the task is to find the nearest 
location from the first null to the first surface.  At that location, build an 
orthonormal basis and compute the local transform of the null relative to that 
basis.  Then reconstruct that relationship by applying it to the 2nd null 
relative to the 2nd surface assuming both surfaces use uniform 
parameterization, not non-uniform as is the softimage default.  Version 2: 
extend to operate on vertices of polygon meshes instead of nulls.  I have a 
working version, but it is slow and not very stable.

The problem I'm encountering is it simply takes too many factory nodes to be 
able to work efficiently. Each node has a certain amount of overhead regardless 
of what it does. Plus, the support for NURBS in ICE is rather abysmal. I have 
to construct my own orthonormal basis plus implement my own algorithm to 
convert from non-uniform parameterization to uniform parameterization.  Both 
are doable, but take very many nodes to do it (including support for edge 
cases) making the whole effort rather clumsy at best. The parameterization 
conversion is expensive as it involves sorting and searching 
(while/repeat/counter nodes).  When applying the ICE Compound to a polygon mesh 
with 5,000+ vertices.....it gets the job done, but chugs.

I have a version of this tool written as a scripted operator, and it performs 
really well because it has better SDK support and the sorting/searching can be 
better optimized.  But one shortcoming of scripted operators is they 
self-delete if an input goes missing (which often happens on scene load or 
model import when the content has been modifed externally).  This in turn 
causes content using the operator to malfunction generating bug reports which 
are sent to artists to fix.  Unfortunately most artists weren't around when the 
content was created years ago, so they have no idea what's wrong, what the 
expected output is supposed to look like, or how to fix it.  Often an asset has 
to be retired and replaced.   This is my motivation for rewriting the tool as a 
custom ICE node as ICE is much more graceful when it's inputs don't exist - it 
just turns red and sits patiently until conditions improve.  This gives artists 
a chance to fix the problem without having to sweat the details because they 
can read the GetData node to see what's missing, then find and repair it.  I'm 
trying to make the content in our pipeline more durable.

So...I'm looking for code samples of how to deal with topology and geometry in 
ICE.  So far I have not found any.


Matt






________________________________
From: 
softimage-boun...@listproc.autodesk.com<mailto:softimage-boun...@listproc.autodesk.com>
 
[softimage-boun...@listproc.autodesk.com<mailto:softimage-boun...@listproc.autodesk.com>]
 On Behalf Of Raffaele Fragapane 
[raffsxsil...@googlemail.com<mailto:raffsxsil...@googlemail.com>]
Sent: Tuesday, May 14, 2013 9:00 PM
To: softimage@listproc.autodesk.com<mailto:softimage@listproc.autodesk.com>
Subject: Re: custom ICENode - questions and request for example source code
Yeah, same hunch here.
Unless the performance expectations are in the multiple characters real-time 
concurrently, in which case I think neither way is gonna get there usually.

On Wed, May 15, 2013 at 1:04 PM, Ciaran Moloney 
<moloney.cia...@gmail.com<mailto:moloney.cia...@gmail.com>> wrote:
I'm sorta , kinda sure that's a dead end for a custom node. You might be better 
off optimizing your ICE tree. It doesn't sound like such a complex problem, 
care to share?

On Wed, May 15, 2013 at 2:41 AM, Matt Lind 
<ml...@carbinestudios.com<mailto:ml...@carbinestudios.com>> wrote:
I've been looking at the ICE SDK as a start to the process of writing custom 
ICE Nodes in C++.  I need to write topology generators, modifiers and 
deformation nodes.  So far all the source code I've seen supplied with 
Softimage only deal with particle clouds or primitive data such as converting 
integers to scalars.  Does anybody have source code for working with the 
Softimage SDK inside an ICE Node to modify topology/geometry?.....or 
Kinematics?   Example:  creating a polygon mesh from scratch, adding/removing 
subcomponents, dealing with clusters, etc...  I ask this partly because the ICE 
SDK docs say to not use the object model....which leads to the question - how 
do I do anything?




While also browsing the SDK docs, I saw in the 'limitations' section that 
custom ICE Nodes cannot define reference, location, or execute ports.   Since I 
am very interested in working with locations, does this mean I cannot do 
queries for locations from inside the ICE Node?  Or does it only mean I cannot 
send/receive locations from other ICE nodes?

Example:

I need to write an ICE Node which takes a polygon mesh and 2 NURBS Surfaces as 
inputs, and whose output is the deformation of a 2nd polygon mesh.  To 
accomplish this feat requires the use of point Locators to map the relationship 
between the first polygon mesh's points relative to the first surface, then 
re-interpret that information to deform the points of the 2nd polygon mesh in 
relation to the 2nd surface.  You can assume the two polygon meshes and two 
surfaces have identical topology.  I need to write this as a custom ICE node 
because it is prohibitively expensive to use the factory nodes (too many 
nodes/workarounds required leading to severe performance degradation).

I'd like to be able to do a point locator query from inside the custom ICE node 
for performance (and convenience) reasons.  Sample code would be a big help.


Anybody?


Matt






--
Our users will know fear and cower before our software! Ship it! Ship it and 
let them flee like the dogs they are!

<<attachment: winmail.dat>>

Reply via email to