they don't provide access to the 'topology' type input or output port. you have to make a node that outputs point positions and polygon description.
here is an example node which meshes and openvdb grid from an incomplete project of mine... https://github.com/caron/OpenVDB_Softimage/blob/master/VDB_Node_VolumeToMesh.cpp s On Wed, May 15, 2013 at 11:57 AM, Sebastien Sterling < [email protected]> wrote: > " for Topology there is no SDK access" does this mean none existent or > locked ? and..Why ? if Matt wants to create custom nodes, are the > limitation inherent to ice, or is ice like the standard SDK locked in > certain areas ? > > > On 15 May 2013 20:25, Matt Lind <[email protected]> wrote: > >> 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:* [email protected] [mailto: >> [email protected]] *On Behalf Of *Ahmidou Lyazidi >> *Sent:* Wednesday, May 15, 2013 3:07 AM >> >> *To:* [email protected] >> *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 <[email protected]>**** >> >> 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:* [email protected] [ >> [email protected]] On Behalf Of Raffaele Fragapane >> [[email protected]] >> *Sent:* Tuesday, May 14, 2013 9:00 PM >> *To:* [email protected] >> *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 <[email protected]> >> 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 <[email protected]> >> 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!**** >> >> ** ** >> > >

