community ice projects

Pooby
Posts: 501
Joined: 27 Aug 2010, 22:25

Re: community ice projects

Post by Pooby » 08 Jan 2012, 15:19

Well, I need some help to make a 3d object tracker, if anyone feels like helping me out.

http://vimeo.com/34654680. I think it would be quite useful to have (a good version of) this in xsi.

fabricio.chamon
Posts: 94
Joined: 09 Jun 2009, 23:47

Re: community ice projects

Post by fabricio.chamon » 08 Jan 2012, 16:09

Hi Paul, I am very interested in the topic, so let me know what kind of help you need.

Last week I've been trying really hard to get my way around the c++/custom ice nodes world. The long term goal is to port some of the OpenCV functions to softimage (http://opencv.willowgarage.com/wiki/). I think there's lots of potential in this package.

Pooby
Posts: 501
Joined: 27 Aug 2010, 22:25

Re: community ice projects

Post by Pooby » 09 Jan 2012, 23:30

That sounds like a fantastic idea.
I'm ok at stuff I can make up, but when it comes to things that rely upon mathematical concepts, I can find myself getting out of my depth.
With regards to the 3d solver. I just cant fully understand the ideo of how to implement this following part
(from the wiki[pedia] on matchmoving)
Calibration

The second step involves solving for 3D motion. This process attempts to derive the motion of the camera by solving the inverse-projection of the 2D paths for the position of the camera. This process is referred to as calibration.

To explain further: when a point on the surface of a three dimensional object is photographed its position in the 2D frame can be calculated by a 3D projection function. We can consider a camera to be an abstraction that holds all the parameters necessary to model a camera in a real or virtual world. Therefore a camera is a vector that includes as its elements the position of the camera, its orientation, focal length, and other possible paremeters that define how the camera focuses light onto the film plane. Exactly how this vector is constructed is not important as long as there is a compatible projection function P.

The projection function P takes as its input a camera vector (denoted camera) and another vector the position of a 3D point in space (denoted xyz) and returns a 2D point that has been projected onto a plane in front of the camera (denoted XY). We can express this:

XY = P(camera, xyz)

An illustration of feature projection. Around the rendering of a 3D structure, red dots represent points that are chosen by the tracking process. Cameras at frame i and j project the view onto a plane depending on the parameters of the camera. In this way features tracked in 2D correspond to real points in a 3D space. Though this illustration is computer generated, match moving is normally done on real objects.

The projection function transforms the 3D point and strips away the component of depth. Without knowing the depth of the component an inverse projection function can only return a set of possible 3D points, that form a line emanating from the center of the camera and passing through the projected 2D point. We can express the inverse projection as:

xyz ∈ P'(camera, XY)

or

{xyz :P(camera, xyz) = XY}

Let's say we are in a situation where the features we are tracking are on the surface of a rigid object such as a building. Since we know that the real point xyz will remain in the same place in real space from one frame of the image to the next we can make the point a constant even though we do not know where it is. So:

xyzi = xyzj

where the subscripts i and j refer to arbitrary frames in the shot we are analyzing. Since this is always true then we know that:

P'(camerai, XYi) ∩ P'(cameraj, XYj) ≠ {}

Because the value of XYi has been determined for all frames that the feature is tracked through by the tracking program, we can solve the reverse projection function between any two frames as long as P'(camerai, XYi) ∩ P'(cameraj, XYj) is a small set. Set of possible camera vectors that solve the equation at i and j (denoted Cij).

Cij = {(camerai,cameraj):P'(camerai, XYi) ∩ P'(cameraj, XYj) ≠ {})

So there is a set of camera vector pairs Cij for which the intersection of the inverse projections of two points XYi and XYj is a non-empty, hopefully small, set centering around a theoretical stationary point xyz .

In other words, imagine a black point floating in a white void and a camera. For any position in space that we place the camera, there is a set of corresponding parameters (orientation, focal length, etc.) that will photograph that black point exactly the same way. Since C has an infinite number of members, one point is never enough to determine the actual camera position.

As we start adding tracking points, we can narrow the possible camera positions. For example if we have a set of points {xyzi,0,...,xyzi,n} and {xyzj,0,...,xyzj,n} where i and j still refer to frames and n is an index to one of many tracking points we are following. We can derive a set of camera vector pair sets {Ci,j,0,...,Ci,j,n}.

In this way multiple tracks allow us to narrow the possible camera parameters. The set of possible camera parameters that fit, F, is the intersection of all sets:

F = Ci,j,0 ∩ ... ∩ Ci,j,n

The fewer elements are in this set the closer we can come to extracting the actual parameters of the camera. In reality errors introduced to the tracking process require a more statistical approach to determining a good camera vector for each frame, optimization algorithms and bundle block adjustment are often utilized. Unfortunately there are so many elements to a camera vector that when every parameter is free we still might not be able to narrow F down to a single possibility no matter how many features we track. The more we can restrict the various parameters, especially focal length, the easier it becomes to pinpoint the solution.

In all, the 3D solving process is the process of narrowing down the possible solutions to the motion of the camera until we reach one that suits the needs of the composite we are trying to create.
Moderator edit: added the [pedia], an URL & quote tags - HB

User avatar
Hirazi Blue
Administrator
Posts: 5107
Joined: 04 Jun 2009, 12:15

Re: community ice projects

Post by Hirazi Blue » 10 Jan 2012, 20:16

[rant]
I was still hoping for some idea that would generate more community activity, interpreting the "community ICE projects" as something the "whole" community could theoretically participate in. And even if the level of the projects is too high for some, making more of an effort that these other people might learn something would be welcomed. It's not necessarily all about the finished compound, IMHO, the "community" component must get some more much needed love also...
[/rant]
;)
Stay safe, sane & healthy!

Pooby
Posts: 501
Joined: 27 Aug 2010, 22:25

Re: community ice projects

Post by Pooby » 10 Jan 2012, 20:53

Everyone has different interests.

User avatar
Hirazi Blue
Administrator
Posts: 5107
Joined: 04 Jun 2009, 12:15

Re: community ice projects

Post by Hirazi Blue » 10 Jan 2012, 20:56

This might come as a shock to you, but I actually do know that. :-?
My rant wasn't directed at you and your idea but at the general state of the "community ICE projects"...
Stay safe, sane & healthy!

User avatar
ActionArt
Posts: 853
Joined: 25 Nov 2010, 18:23
Location: Canada

Re: community ice projects

Post by ActionArt » 10 Jan 2012, 21:18

How about a quick pipe making tool. Right now it's a pain and it can be so much simpler. LWCad had a really nice little tool where you could quickly mark out linear or curve segments, quickly make a specific radius at each bend or all bends the same and one more click gave you the diameter. MoI can do something similar although not quite a easy. Here's an example.

Who doesn't need to make some pipes/cables/wires once in a while?

Step 1: http://www.creativecontrol.ca/send/PipeS1.jpg

Step 2: http://www.creativecontrol.ca/send/PipeS2.jpg

Step 3: http://www.creativecontrol.ca/send/PipeS3.jpg

Even if step 2 could be accomplished it would be SO useful in many ways. There is currently no good way to add a specific radius to a line segment or curve that I know of. Power Extrude could be used to extrude the pipe although it would be much nicer if there was a one click/set the radius and pow, you have a pipe rather than setting up an extrude every time. Both options would be nice if you don't want a plain circular extrude.

User avatar
gustavoeb
Moderator
Posts: 587
Joined: 21 Jul 2010, 00:33
Skype: gustavoboehs

Re: community ice projects

Post by gustavoeb » 11 Jan 2012, 20:39

I myself think that this can be helpful to people with many different skillsets. Even though Im not into tracking, for example, the sources that were discussed here already give great insight on the subject, altough the implementation is not completaly clear. Even though that is not very productive (in a more direct way) its still nice.

One thing though. It would be nice if we could keep the technical stuff into theyre own threads. Since this is suposed to be a discussion about the projects themselves, present and future.
Gustavo Eggert Boehs
Blog: http://www.gustavoeb.com.br/

User avatar
gustavoeb
Moderator
Posts: 587
Joined: 21 Jul 2010, 00:33
Skype: gustavoboehs

Re: community ice projects

Post by gustavoeb » 11 Jan 2012, 20:40

ActionArt I think at the moment ICE is not the tool to build that tool since it does not deal with Curve objects (only strands). Powerextrude by Fabricio Chamons is a great tool for taking care of the extrusion, but is as far as it will go.
Gustavo Eggert Boehs
Blog: http://www.gustavoeb.com.br/

User avatar
gustavoeb
Moderator
Posts: 587
Joined: 21 Jul 2010, 00:33
Skype: gustavoboehs

Re: community ice projects

Post by gustavoeb » 14 Jan 2012, 00:56

Still on usefullnes for the community I think it should be MANDATORY for all projects placed in this section to have theyre compounds shared, preferably well comented. I understand making little tutorials (be videos or images) is way too time consuming, so this would something more fair to ask for...

What do you guys think?
Gustavo Eggert Boehs
Blog: http://www.gustavoeb.com.br/

User avatar
Inisheer
Posts: 19
Joined: 07 Jan 2012, 05:31
Location: Maryland, USA

Re: community ice projects

Post by Inisheer » 15 Jan 2012, 23:32

I've been watching this thread closely over time with a lot of interest. As a newbie and someone extremely interested in this, I thought I would share my views which may (or may not) reflect those of others with similar experience who might stumble upon this topic.

First, there are some great, and I mean GREAT, examples of what ICE can do and the possibilities of development with ICE for the projects that have been listed so far. However, when I look at this as an experienced Windows software developer I see some issues where the level of talent between individuals participating in a selected project may get frustrating. Experienced ICE users may get a bit fed up with the slow work or trial and error of those who are lesser experienced in ICE. Likewise, those new to ICE may seem like the project is moving at a pace that is faster than their capabilities. I think a way to solve this is not to have a large group working on one ICE compound or tool, but to create a suite of sorts which combines various tools.. all of which may differ in complexity.

For example (and I believe someone stated this previously in this thread): ICE Modeling Tools Package. A package of tools (addon) could contain multiple tools which all require a different set of talents and experience to create. With that said.. and similar to software development.. a plan/schematic/vision of what is to be created will have to be made prior to starting. Then, all contributors will have a common starting reference point and can contribute where their skills allow.

Again, I really like the ideas presented here and I think there seems to be great effort by the mods and community members to keep Softimage thriving. I just thought I would post some thoughts from a beginners point of view who is looking to contribute in any fashion possible. :-@

User avatar
gustavoeb
Moderator
Posts: 587
Joined: 21 Jul 2010, 00:33
Skype: gustavoboehs

Re: community ice projects

Post by gustavoeb » 19 Jan 2012, 13:35

Your diagnostics of the current situation sound very accurate to me...
Gustavo Eggert Boehs
Blog: http://www.gustavoeb.com.br/

fabricio.chamon
Posts: 94
Joined: 09 Jun 2009, 23:47

Re: community ice projects

Post by fabricio.chamon » 19 Jan 2012, 14:38

I like the idea of extending the modeling package!

So, as a first step I think we should list the most common tasks and put them into a priority list (according to users vote).

Here's my list (not in any order).

- shell/solidify
- cap holes
- extrusion along curve (2 versions: a)fast and simple, b)complex)
- loft
- revolution
- de-intersect (should fix intersecting groups of polygons: think of fixing the result of a cloth simulation ran without self-collisions)
- symmetry (clone/symmetrize input geometry and copy all its further modifications)
- extended primitives (Eric Cosky alread did a nice set: http://www.boundingboxgames.com/tools/essgeo)
- relax/smooth tool
- retopology (based on curves?)
- merge vertices (based on threshold)
- clone island (clones one or more islands of an input mesh, with option to delete the originals)

so here's what I cant think of right now. I'm not a modeler, so maybe there's much more important things, but hey, it's a start.

I know many of them already exists, but let's make some room for improvements.

User avatar
ActionArt
Posts: 853
Joined: 25 Nov 2010, 18:23
Location: Canada

Re: community ice projects

Post by ActionArt » 19 Jan 2012, 16:19

It's a very good start! Those are all very useful ideas and I think this would be an excellent project.

A couple more ideas:

A good simple extrude polygon that leaves both ends capped.

A good 3D fillet (polygons) like we have with surfaces. I don't know if this is possible as I don't know any package that has it currently.

I would still like to be able to interactively draw primitives properly (see Lightwave).

Those could come as low/last priority.

Anyway, my full support for a modeling toolset as Fabricio has outlined :-bd

User avatar
gustavoeb
Moderator
Posts: 587
Joined: 21 Jul 2010, 00:33
Skype: gustavoboehs

Re: community ice projects

Post by gustavoeb » 20 Jan 2012, 14:34

Nice Fabricio, I would add the aforementioned Modo Bridge Tool, as it seemed to be someones actual need.
I found a video of it but is from modo 202, so I dont know if something has changed in it lately... http://www.luxology.com/training/video.aspx?id=36

Inisheer also suggested that things were to be ranked by ease of coding...

I'll try a little sorting of complexity vs priority then someone with more ICE modelling knowladge can pick it up from there and make a better sorting of things...
I've tried to keep stuff that is already adressed by standard tools down in priority, and stuff that is already addressed byfactory ICE compounds waaaay down

Easy (from highly to less relevant)
extrusion along curve (fast and simple)
Symmetry
Merge vertices (based on threshold)
Revolution
Loft
Shell (ICE version already exists in SAP so is less relevant)

Intermidiate (from highly to less relevant)
Extended primitives
clone island (clones one or more islands of an input mesh, with option to delete the originals)
extrusion along curve (complex)
relax/smooth tool (with shape preservation?)
Cap Holes (ICE version already exists in SAP so is less relevant)

Advanced (from highly to less relevant)
better boolean tools (with actually good results :)
de-intersect (should fix intersecting groups of polygons: think of fixing the result of a cloth simulation ran without self-collisions. this looks more like a deformer for me, but is great!)
retopology (based on curves?)
Bridge Tool (modo alike, able to twist and find nice solutions to bridge different number of edges)
Gustavo Eggert Boehs
Blog: http://www.gustavoeb.com.br/

User avatar
Inisheer
Posts: 19
Joined: 07 Jan 2012, 05:31
Location: Maryland, USA

Re: community ice projects

Post by Inisheer » 20 Jan 2012, 14:46

gustavoeb (and others),

Great list. I think I'm going to take a crack at the merge vertices, as that seems to be something I could use quite often.

Is there a preference to the group as to whether we create these as compounds (ie "ICE Programming") or C++ custom nodes? I haven't built any custom tools and I'm not sure if there are any implications / side effects while using one or the other, or if they will both give the same functionality.

Post Reply

Who is online

Users browsing this forum: No registered users and 16 guests