Emitting from cached torn surfaces

Become a member of the CGSociety

Connect, Share, and Learn with our Large Growing CG Art Community. It's Free!

THREAD CLOSED
 
Thread Tools Search this Thread Display Modes
  02 February 2013
Emitting from cached torn surfaces

Hello!

I've finished a sim that tears an object using nCloth tearable constraint and was planning on just using the cache and a texture map to emit particles where the tears were happening. My original workflow >>

-Create alembic cache from nCache of sim ( for speed )
-Import alembic cache, extrude inwards and delete outside faces
-Create another alembic cache ( again, just to speed things up ) of the inner geometry
-Import both the outer shell and the inner shell into a new scene
-Emit from surface on the inner geo
-Make the outer shell a passive collider

Things look great and all particles stay within the mesh until the surface starts to tear. Does anyone have an idea why collisions would suddenly just stop working once the surface begins to tear?
 
  02 February 2013
Or use ToonFX Outline shader to create a surface based on the tear and emit from that.

http://forums.cgsociety.org/showthread.php?t=1023197
__________________

.

Reel - 3DInk.com
Filmography -IMDB
R&D - VIMEO

*please read- cyanbsl.blogspot.com/*
 
  02 February 2013
Thanks! This is a great technique, but for some reason once the mesh begins to tear new borders pop up in places where they shouldnt. It outlines everything else really great but did this ever come up when you were working with the pfx toon shader and tearable surfaces?

EDIT : Forgot to put the same texture map that drives the pointToSurface constraint glue strength into the line width map. Works great now! I'll post something up soon. Thanks Howard!

Last edited by pfunkifized : 02 February 2013 at 06:39 PM.
 
  06 June 2013
thats a great way to emit from broken edges....

but how do we stop that emission ?
...when the breaks running throught the mesh how can we control that edges that already emitted particles dont emit any further and while the break process issn finished those newly created edges emit furthermore... ?


i dont get it...

Originally Posted by HowardM: Or use ToonFX Outline shader to create a surface based on the tear and emit from that.

http://forums.cgsociety.org/showthread.php?t=1023197
 
  06 June 2013
Houdini?

Have to say its a bitch and not really controllable, but maybe some mad mel-scripter or Duncan could chime in?

Id say one way for more control is to emit particles off those torn edges that die, perhaps based on velocity, and emit particles off those.... or ones that are only emitted off the edges at certain velocity...
__________________

.

Reel - 3DInk.com
Filmography -IMDB
R&D - VIMEO

*please read- cyanbsl.blogspot.com/*
 
  06 June 2013
HeHe .. =) yeah...

i did that already but no success.. :|

i colored the particles by velocity and used the emit command to emit new particles when the color changes - but the problem stays the same. cuz the first emission doesnt stop the polyPFXConvertedToon outline is emitting and emitting, creating new particles, which creates new particles....
 
  06 June 2013
One thing you can use is that the tearing always adds new vertices and edges, so if you look at only the new vertices created since the last frame you can use those to emit from.

Here is an expression that uses this technique. Before creating the expression first create an nCloth with a makeTearable constraint. You also need to create an nParticle system as well as add an integer attribute "lastPolyCount" to the node outputCloth1 (or whatever nodes you like if you edit the expression ).

Note this expression is a normal one, not a particle expression.

int $c[] = `polyEvaluate -v outputCloth1`;
int $max = $c[0]; int $count = 20;
float $emitSpeed = 1.0;
if( frame >1 ){
    int $min = outputCloth1.lastPolyCount;
    int $i;
    for( $i = $min; $i < $max; $i++ ){
      vector $p = `pointPosition ("outputCloth1.vtx["+$i+"]")`;
      for( $j = 0; $j < $count; $j++ ){
        float $rx = $emitSpeed * (rand(1)-0.5);
        float $ry = $emitSpeed * (rand(1)-0.5);
        float $rz = $emitSpeed * (rand(1)-0.5);
        emit -object nParticle1 -pos ($p.x) ($p.y) ($p.z) -at velocity -vv $rx $ry $rz ; 
      }
    }
}
outputCloth1.lastPolyCount = $max;


It would be a bit more work, but one could use the same technique to look at new edges instead of points and then emit particles along the edges.

Last edited by Duncan : 06 June 2013 at 10:21 PM.
 
  06 June 2013
As always you rock D!
__________________

.

Reel - 3DInk.com
Filmography -IMDB
R&D - VIMEO

*please read- cyanbsl.blogspot.com/*
 
  06 June 2013
Hey thx Mister D. - i give it a try tomorrow and see how it works,
 
  06 June 2013
Thread automatically closed

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.
__________________
CGTalk Policy/Legalities
Note that as CGTalk Members, you agree to the terms and conditions of using this website.
 
Thread Closed share thread



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
CGSociety
Society of Digital Artists
www.cgsociety.org

Powered by vBulletin
Copyright 2000 - 2006,
Jelsoft Enterprises Ltd.
Minimize Ads
Forum Jump
Miscellaneous

All times are GMT. The time now is 09:42 AM.


Powered by vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.