Sticky Camera Map BirthPosition question


#1

Hello,
I am attempting to “sticky” camera map an image on to particles, but I would like to map them while the particles are on a specific frame (not the first frame, or their birth frame). Is there a way to force the BirthPosition to their location on an arbitrary frame?

Thank you!
-Ben


#2

A couple of questions:

  • Is it the same frame for all particles, or does each particle have its own “BirthPosition” start frame?
  • What should be the content of the BirthPosition channel on the previous frames? For example, let’s say all particles are supposed to have the Position on frame 42 as their BirthPosition. Do you want that BirthPosition to propagate back to the frames before 42 so you can still perform correct camera projection on those frames?

#3

Hi, thanks for the reply!

Yes, I would like to set the same BirthPosition for all particles on the same frame and it would be great if that BirthPosition propagated backwards in time as you suggested.

Basically, I would like my particles to “line-up” with their projection midway through the simulation.

-Ben


#4

The first part is relatively simple.

The Birth Channel Generator tool records the Position channel by ID of every new particle it sees. So if you want to generate a channel from all particles that are alive on a frame, say 42, all you need to do is move frame 42 and all following frames into a subfolder and run the tool to create a new sequence. Since the tool will see the frame 42 as the first in the sequence, all BirthPositions for all particles from there on will be based on the Position channel of frame 42.

The backwards propagation requires some hacking. Basically you need to rename the previous frames to invert the sequence. So you take frames 1 to 42 into another subfolder, and rename them using a script or even manually so that frame 42 becomes frame 1, frames 41 becomes 2, frame 40 becomes 3 and so on until frame 1 becomes 42. Then you run the Birth Channel Generator on that folder. It will start with frame 1, but it is in fact the content of frame 42, so it will record all Positions on that frame by ID and will propagate that value to the following frames which in fact run back in time. Once the new sequence is generated, you need to rename it back into the right order so 42 becomes 1 and 1 becomes 42.

You then put the outputs of both runs in one folder and you end up with sequence that is based on the Position channel on frame 42 in both directions in time!

(I was a VFX TD in a previous life… :mrgreen: )

Now that I think about it, you could load the original sequence in a PRT Loader, set its playback graph to move backwards, and resave the particles from 42 to 1 to a new sequence with the same content, so you don’t have to rename files. Krakatoa can resave the PRT Loader for you with the backwards order. Once the BirthChannel is generated for the first half of the sequence, you can repeat that to invert the direction of time again…

We could add an option to the Birth Channel Generator to run backwards so the whole renaming thing would not be needed, but I am not sure I can convince the developers it is worth it. Show us some cool results and we might consider it :wink:


#5

Awesome, thank you for the quick and detailed reply, I will give that a shot!

-Ben


#6

Hey Bobo,
So I am having some trouble getting this to work… Here is what I tried:

  1. Cached out my sim as .prt using Krakatoa’s “render” method. (simulation was originally from x-particles)
  2. Loaded the cache, then keyframed the playback graph to retime the simulation like so: frame 97-0,98-200 (so frame 97 is first in the timeline and can be used at the birth position).
  3. Re-cached the simulation with the new timing
  4. Used the Birth Channel Generator Tool on the re-timed cache so that it would use the first frame (originally frame 97) as the Birth Position.
  5. Loaded this new cache with a new PRT loader.

I am currently just camera projecting a color ramp on to the particles for testing, but when I try to use “BirthPosition” as the Input Position Channel and “Color” as the Output Color Channel, I do not see the ramp anymore in my renders. I actually only see one of the ramp’s colors (not even the original particle colors).

I was planning on using the playback graph once more to re-time the particles once I had the sticky camera mapping working correctly on the first frame.

Any idea what I am doing wrong?

Thanks again!
-Ben


#7

Can you upload the first frame (previously 97) or email it to me (bobo AT thinkboxsoftware DOT com) so I can inspect the channels and see what it contains?


#8

I can see the problem now.

Your PRT file has an ID channel, but the ID channel is totally invalid - all particles have an ID of 0.
As result, the only particle the Birth Channel Generator tool sees is particle ID 0, and thus all particles get its Position as Birth Position :slight_smile:

# ID Position Velocity Color BirthPosition 1 0L [-58.6789,87.1984,-346.889] [85.1875,-134.375,-25.5938] [0.0235291,0.105896,0.274414] [-58.6789,-346.889,87.1984] 2 0L [-63.757,83.3671,-181.04] [7.61328,7.53906,37.9063] [0.443115,0.0588379,0.0588379] [-58.6789,-346.889,87.1984] 3 0L [75.0226,-49.4683,-174.705] [-1.54492,25.4219,36.5] [0.443115,0.0588379,0.0588379] [-58.6789,-346.889,87.1984] ...

Was the “ID (from Id)” channel checked in the Krakatoa X-Particles Source object when you saved your X-Particles? You must check it both in the Source object and in the Save dialog, otherwise the Save will assume 0 for all particles.


#9

That solved it! Thanks Bobo!