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 Tools Search this Thread Display Modes
Old 02 February 2013   #1
Emitting from cached torn surfaces


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?
Old 02 February 2013   #2
Or use ToonFX Outline shader to create a surface based on the tear and emit from that.



Reel - 3DInk.com
Filmography -IMDB

*please read- cyanbsl.blogspot.com/*
Old 02 February 2013   #3
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.
Old 06 June 2013   #4
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.

Old 06 June 2013   #5

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

*please read- cyanbsl.blogspot.com/*
Old 06 June 2013   #6
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....
Old 06 June 2013   #7
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.
Old 06 June 2013   #8
As always you rock D!


Reel - 3DInk.com
Filmography -IMDB

*please read- cyanbsl.blogspot.com/*
Old 06 June 2013   #9
Hey thx Mister D. - i give it a try tomorrow and see how it works,
Old 06 June 2013   #10
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
Society of Digital Artists

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

All times are GMT. The time now is 10:32 AM.

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