Jump to content
Hash, Inc. Forums

Camera Proximity Activator


Recommended Posts

  • Admin

You guys inspired me to consider the possibilities with your Multi-Model Pose Sets and so I did a test to see if an old idea might work.

It took me a few tries but I finally came up with something that demonstrates the basic idea.

 

The idea is that through the Active setting we can add an expression that will turn on/off an object based on proximity to another object (such as a Camera).

I believe I've got this somewhat in reverse (objects disappear as the camera comes close to them) but it might serve as a proof of concept.

 

In the project file I also created another file called 'The Zone' but I haven't done anything useful with that yet.

The idea might be take everything into the same model that is routinely required (camera, lights, etc. etc.).

Things outside the zone would then be otherwise effected.

 

Once the general expression is designed it can then be pasted into all objects Active property (probably an ideal use for an Excel spreadsheet or global text replace).

 

There are many alternative uses for such things.

One of my initial plans was to use it to automate crowds to move them away from a zone immediately around the camera.

Thus simulating the effect of a person walking through (or fighting through) that crowd.

 

The other longer term purpose behind this was to facilitate split rendering based on proximity.

In this way a camera could go around 'filming' things in isolation for later addition into composite imagery.

As a language of sorts would be needed in order to keep everything organized I shelved the idea pending more R&D.

As split rendering is a complicated subject and I wanted to break it down into vital elements adequately.

 

The actual expression I added to each of the three objects in the Chor in this case is:

 

[EXPRESSION]

If(..|..|Camera.Transform.Translate.Z<..>

[/EXPRESSION]

 

Of course also note that this expression doesn't account for any other direction than the Z axis.

There is likely a better approach to activation/deactivation.

Project_Camera_Proximity_Activator.prj

Link to comment
Share on other sites

  • Admin

Here's another Project file based on the first with the following changes:

 

- The On/Off state of the Expression has been reversed

- A Filter for 'Active' has been created to more easily see what objects are using the expression.

 

Not that this is also how behavioral (artificial intelligence) could be similulated in that a variety of expressions could be created and applied to groups of objects independently.

One group might activate (or move farther away) while another group might deactivate (or come closer).

Project_Camera_Proximity_Activator__2_.prj

Link to comment
Share on other sites

  • Hash Fellow

a crowd simulator!.. that is something I've had in the back of my mind but have never embarked on yet. I will be curious to see what you make of that.

 

 

lessee... I'm sure there's some sort of Pythagorean hypotenuse formula that would let you calculate the distance between any two points.

Link to comment
Share on other sites

a crowd simulator!.. that is something I've had in the back of my mind but have never embarked on yet. I will be curious to see what you make of that.

 

lessee... I'm sure there's some sort of Pythagorean hypotenuse formula that would let you calculate the distance between any two points.

But is there a way to accumulate small changes based on the distance? Or just have it automatically accumulate based on a velocity that you can set based on the distance away?

 

I'm sure that the existing Flocking feature does this internally, but there's not enough control over the particulars to get the kind of effect Rodney is looking for.

Link to comment
Share on other sites

  • Admin

Here's an approach from a drag and drop angle.

I'm liking this because folks wouldn't need to concern themselves so much with coding of expressions because... these actions could be collected/shared as little scripts/macros. :)

 

The idea is to create an Action that you can drop onto a Character/Object that would tell it when to Activate.

 

The trick is that the Active setting is actually (and I must assume always?) applied to the Model Bone.

As such all we need is an expression that turns that state On/Off (or causes some other action) based on some criteria we set in the expression.

 

In my project I put together a little test that expressed that if the Shaggy with the the Action applied was to rise above 100cm he would be 'taken' (i.e. deactivated).

The other two Shaggy's rise beyond 100cm with no effect (of course.. because they don't have the required Action.

 

I arrived at this because the other approaches I was investigating were getting too complicated.

Simplicity is key.

 

My thought was initially to create a Null called Activator and have things appear based on where that Null is located.

You could then constrain the Null to something like a camera.

But... that's only approaching the problem from one angle.

We know that each model has a steady state of on/off and (even if we alter/augment that) the results of changes to that state can be anticipated.

ShaggyGetsTaken.prj

Link to comment
Share on other sites

  • Admin
But is there a way to accumulate small changes based on the distance?

 

Even if there isn't a direct way I believe as of the current release (or one or two releases ago) variables can be stored for later use in expressions.

I haven't had time to play... heck, this is only my second or third working expression... but I sense that the recent additions by Steffen are a very big deal with regard to expressions.

Link to comment
Share on other sites

  • Admin
Your camera activator could be used in conjunction with out set. As the camera turns it could activate the buildings

 

Something to think about.

 

I was thinking along those lines but at this point it's not quite ready for camera turns, at least not in the sense that the expression only accounts for triggering on/off in the Z axis.

Link to comment
Share on other sites

  • Admin

I had forgotten about that one. Very neat John.

 

The issue with using that type of expresssion is that it is Chor/Time dependent and it needs to be space aware.

There is probably some way to setup a scene to where (similar to what Chris is doing) parts of a set are turned on/off through time but my goal would be to automate that process similarly to what is happening in A:M itself when it comes to clipping the viewing area to determine what will get rendered. No small task there.

 

Now... if we consider your expression:

 

If(ChorTime()>0.5,If(ChorTime()

 

The only way I know to proceed (in this ChorTime() vein) is to create a controller that when a value gets to a certain level it turns off an object/character/building etc.

Think of this as a proximity value or potential for action.

When that value gets either inside or outside of a particular range it would then trigger an action.

 

This in and of itself sounds to me a lot like a percentage pose. (or more for boolean true/false results simple triggers could be called via on/off poses).

 

This would almost call for every Object to have a new parameter (although this could also be an Action or a Pose) called Active State or something similar.

Then at whenever time the specific criteria of that Active State is met the expression would fire.

This is the primary way I would think using something like ChorTime() would work as key events would be dictated at specific times and that would then trigger all 'live' Objects' Active States.

This might be something as simple as turning itself on or off or triggering something far more complex.

 

I thank you for this consideration because it may supply an important element in the process.

Using ChorTime() as the initiator does make good sense as whatever happen in the Timeline SHOULD represent the primary action in a scene.

Therefore the Active State would drive secondary action/reactions of those primary event.

 

Added: I really don't understand expressions.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...