Mailing List AE-List@media-motion.tv ? Message #51579
From: rendernyc <rendernyc@gmail.com>
Subject: Re: [AE] freeze frame from precomp - expression needed to not get duplicates
Date: Wed, 13 Nov 2013 14:04:44 -0500
To: After Effects Mail List <AE-List@media-motion.tv>
which is why using index numbers on consecutive layers to map to the time of the layers in the precomp is a good way to go. each index will give you a unique image


On Wed, Nov 13, 2013 at 1:57 PM, Byron Nash <byronnash@gmail.com> wrote:
I've written something like this in script form(Fisher-Yates) although I did not know it had a name. I can't think of a good way to do it with expressions without killing the render. It would need to go through many iterations for each layer on each frame to get it going. I imagine with 125 layers you would start to get speed issues.


On Wed, Nov 13, 2013 at 6:35 AM, Chris Zwar <chris@chriszwar.com> wrote:
Grrr sorry, I decided to google my own suggestion and discovered I was wrong.  What you need is a Fisher-Yates algorithm:


Luckily there's plenty of examples on the web, and it seems that writing a script to shuffle cards is a common task given to computer students, so if you think of your 300+ faces as a deck of 300 cards then you should be able to google a solution sooner or later.


-Chris


On 13/11/2013, at 10:23 PM, Chris Zwar <chris@chriszwar.com> wrote:

This question has come up before, and I remember someone else explaining that you will need to use a custom random number generator, and not just the generic random expression.  As you have realised, the problem with random() is that even though the numbers are random there is nothing to stop the same number being randomly chosen more than once.

You need to use a "monte carlo" random number expression, which I don't have and am not sure where you find one.  I think the algorithm is normally used to shuffle a deck of cards, hence the name.  I guess when you want a computer to create a random deck of cards it's important to know that each card only appears once!

It might be quicker to do it manually.

HTH
-Chris

On 13/11/2013, at 9:18 AM, Greg Balint <delrazoraelist@gmail.com> wrote:

Got a quick one here.. something i'm probably just either not familiar with, or I'm thinking too hard about it.

I've got a large grid wall of squares with people's faces in them.  Each face panel is the same precomp with this expression in the time-remap attribute.

seedRandom(index,true);
myFrame = Math.floor(random(303));
framesToTime(myFrame)

Basically this grabs a random frame from the precomp, which is about 10 seconds long, and shows it as a freeze frame for that particular layer.

I've got 125 face panels all using this expression, and for the most part it works wonderfully.. they all have random faces on them, and if I add another layer, the random seed changes and I get a whole new slew of faces (which doesn't matter in this instance, but i could see that as a problem in others)

My issue is, even though I've got over 300 frames (each frame with a new face) in my precomp.. the randomness is grabbing duplicates.. in some cases 2-3 pairs of duplicates over the course of the 125 it chooses.


Anyone know of a way to append this script so that it does not choose something it has already?

I'd even be fine if there were a way to use an expression to grab frames sequentially from the precomp and then I could just hand choose to make sure there's no duplicates in the first 125 frames.

I think i might just be overthinking this, but I'm not sure if I've seen a "check for duplicate and don't use" sort of expression before.

thanks in advance.

--
///Greg Balint
//Art Director / Motion Graphics Designer
/321.514.4839
delRAZOR.com/ 






--
 
Subscribe (FEED) Subscribe (DIGEST) Subscribe (INDEX) Unsubscribe Mail to ListMaster