User-control of Polygon Visibility in Animation



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 07/06/2011 at 15:46, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R10-R12 
    Platform:   Windows  ;   Mac OSX  ; 
    Language(s) :     C++  ;

    ---------
    I'm at a bit of a sticking point on a methodology and interface for doing this.

    If you had to provide the user a way to determine which polygons are visible and which aren't during the course of an animation then in what way would you do it?

    Since this only involves polygon objects, I was considering using a gradient map (say, black is the start and white is the end) so that polygons in the darker areas would appear earlier than those in lighter areas as applied to its mapping (UV or otherwise).  Of course, this limits the number of levels to 256 (discreet).  Definitely don't want to make the user select areas of polygons (or, worse, individual polygons) and set some value to weight it, if possible.  If it comes to that, then it would be about the same as applying vertex map weighting for character rigging but using polygons instead of vertices.

    Open for any suggestions! :)

    Thanks,



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/06/2011 at 03:51, xxxxxxxx wrote:

    Do you want to create a plugin that "keys" the visibilty of polygons in the editor ?
    Like, you have a cube and the visibility of it's face 0 on Frame 0 is 0, and on Frame 100 it is 255 and there should be an interpolation during the animation ?
    Do I understand you right ?

    Cheers,
    Niklas



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/06/2011 at 08:13, xxxxxxxx wrote:

    It's keying visibility in the renderer (and editor) by way of a generator object whose results are the visible polygons at some percentage of the visibility flow.  Say you have a plane 100x100 and select an arbitrary 'seed' polygon.  From there (0%), the polygons become visible outwardly from that polygon until all are visible (100%).  This can be done simply, albeit procedurally, by interpolating neighbors at each level for visibility flow.

    I'm looking for a way to let the user direct the visibility flow so that they can, for instance, have polygons towards one edge of the plane become visible first, then others on the adjoining edge, and so on using some form of map.  Of course, this is not restricted to a plane but any polygon object.  Currently, vertex mapping is looking promising but this requires averaging vertex weights for each polygon to determine the polygon's strength value.  And not sure if this will yield the results desired.

    Thanks,



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/06/2011 at 10:00, xxxxxxxx wrote:

    Ok, not easy for me to understand. I'll try it anway. ;-)
    Just to make sure: In simple, You have only one visible polygon, an due the animation all surrounding polygons start to become visible, too, so the visibility kinda 'grows' from polygon to polygon ?
    This should be possible using the Neighbor class. :)

    /edit: Or am I wrong once again and you're trying to animate from one vertex map to another, or something similiar ?

    ///:  EDIT:
    Ahhh now I got it ! xD Didn't get you already mentioned the Neighbor class >.>
    So, the user creates a polygon selection and set's the polygons from that selection to the seed polygons.
    Now, another selection which determines the polygons that should be visible at the end of the animation.

    Right ?

    This is some Pseudo from scratch I think about:

    // only do this once   
    array pnts_srt = GetMyStartPoints();   
    array pnts_end   = GetMyEndPoints();   
      
    // The pointcount for start & end must be equal for interpolation.   
    // Distribute new points to the array where points are missing   
    // of course, the should be distributed senseful   
    if (pnts_srt.length > pnts_end.length) {   
      pnts_end = AddPointsDistributedBetweenPoints(pnts_end,pnts_srt.length);   
    }   
    else {   
      pnts_srt = AddPointsDistributedBetweenPoints(pnts_end,pnts_end.length);   
    }   
      
    . . .   
      
    // do this for calculating the interpolation   
    array new_pnts = new array(pnts_srt.length)   
    for (int i = 0; i < pnts_srt.length; i++) {   
      new_pnts[i] = GetNearestPointInMesh(   
        Interpolate(   
          pnts_srt[i], pnts_end[i], percentage   
        )   
      );   
    }   
      
    SetVisibilitiyForPoints(new_pnts);
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/06/2011 at 10:20, xxxxxxxx wrote:

    The Neighbor class is already being used for the simple, procedural flow and for determining each polygon's neighbor.

    But the user can't 'direct' which polygons appear when using that alone.  There must be a timing mapping.  My thought is to have the strength values of the vertex map determine when polygons appear over the course of the animation (which is controlled by a percentage slider being keyed).  So, if the polygon calculates to 0% strength, it will appear when the slider/animation is at frame 0.  If the polygon calculates to 75% strength, it will appear when the slider is at 75% (at whatever frame that represents).  And so on.

    While painting vertex maps in C4D to precisely control the flow is a bit tedious, I can find no way to make it less tedious. ;)



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/06/2011 at 10:30, xxxxxxxx wrote:

    Oh, I edited my post, maybe this is a read worth. :)
    I thought about 2 states of visibility that can be interpolated.

    Cheers



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/06/2011 at 11:12, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    So, if the polygon calculates to 0% strength, it will appear when the slider/animation is at frame 0.  If the polygon calculates to 75% strength, it will appear when the slider is at 75% (at whatever frame that represents).  And so on.

    I hope this is some kind of what you searched for:
    Use a spline in the GUI combined with 1 percentage slider to determine the distribution of the visibility.

    // within a loop over all points and their vertexvalues  
    vertexvalue = GetVertexMapValue(i);  
    slidervalue = GetFloat(SLIDER);  
    splinerange = GetFloat(SPLINE_RANGEMAP_SLIDER); // A percentage slider defining the mapping of the spline to the vertexmap  
    splineX = RangeMap(vertexvalue, minIn = slidervalue-splinerange,  maxIn =slidervalue+splinerange, minOut = 0., maxOut = 1.)  
    splinevalue = Spline-GetY(splineX);  
    SetPointVisibility(i, vertexvalue * splinevalue)
    

    Here an Image explanation of what I think You mean:

    Cheers,
    Niklas



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/06/2011 at 20:31, xxxxxxxx wrote:

    I don't get why a spline is necessary but I've decided that the VertexMap tag would be too difficult for the user to get a clean gradient to cause a cascade as envisioned.

    Instead, I'm going to add a tool which lets the user select 'node' polygons and set the percentage value at when to appear.  Then I'm going to do the interpolation in code.  This makes the user's life happy and mine only a bit more difficult. :)



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 09/06/2011 at 06:42, xxxxxxxx wrote:

    Ok, can you please show me an example when you have finishe ? Seem's like I still didn't get it right. ;-D



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 16/06/2011 at 14:24, xxxxxxxx wrote:

    Sure.  I'm getting close to finishing.  Multivariate Inverse Distance Weighting (M-IDW) is the only sticking point now.  If you know of any good resources on quick algorithms or code for something like that it would be much appreciated. :)



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/06/2011 at 01:18, xxxxxxxx wrote:

    [Spaaaam >.>]



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/06/2011 at 01:19, xxxxxxxx wrote:

    I'm sorry, I don't even know what it is :D
    But I take a look at it, sounds kind of interesting.

    Cheers,



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/06/2011 at 09:19, xxxxxxxx wrote:

    Got it figured out.  Just needed to change a few things to make it work as expected.  Should have a video up later today. :)



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/06/2011 at 20:37, xxxxxxxx wrote:

    You can see the video and other information here:

    http://www.kuroyumes-developmentzone.com/unfurl/unfurl-examples/



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 24/06/2011 at 10:22, xxxxxxxx wrote:

    Now this is quite what I thought you want to to. ;-)
    Didn't check the plugin out, yet.
    But in the Video, you have an absolute visibilty. (visible or not)
    is it possible to set a percentage for this with C++ ?
    If yes, why not use a spline ?
    At the Moment, if you had used a spline, it would look
    like this:

    _______  
         \  
          \  
           \_______
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 24/06/2011 at 13:31, xxxxxxxx wrote:

    Btw, holy s**t ! Cool Plugin !! O___o
    How did you make the Polygons rotate aboute an Edge ?! :O This is awesome ! ;)


Log in to reply