How would you make something like this?

Started by
14 comments, last by Madoc 11 years, 4 months ago
Recently I saw an Indi game named "Sui Generis" (here is a video of it http://kotaku.com/5958364/we-might-be-looking-at-the-next-generation-ofindie-rpgs), it seems very interesting. There are two things that are particularly interesting: the physic interactions, the animation of the characters.

My question is related to the characters animation. I want to ask how you can make something like this, I mean the movements seems very "physic driven" to call it some way. I know that Euphoria (http://www.naturalmotion.com/products/euphoria/) is a very good dynamic motion synthesizer, surely with that you can make something similar but this studio doesn’t seem to be very big so they most probably don’t have access to that kind of technology. May be the animations are simple made with Maya, 3D Studio, etc and they have a ragdoll and nothing else... but the result is very good.

What do you thing guys?
Advertisement
I'd say your probably right, and likely using some sort of physics API to generate a smoother after effect, especially when the skeleton is destroyed. I have to say thats a pretty cool looking game, but its probably done the same way most of the physic based 3D games are, just with a difference camera angle is all.
'Knowledge isn't key, but understanding...'

My qualifcations are not here to showcase, but for those I answer and ask, to get a better idea on my knowledge.

BCS Level 2 Certificate for IT Users (ECDL Part 2)
OCR Level 2 National Award in Business
Level 2 First Diploma in Media
Level 3 Diploma in Games Design and Development Extended
BSc Hons in Computer Games Programming (Current - 1st Year)
They might be using homebrew 3d scanning techniques. They would set up dozens of cameras in front of a blue screen and piece them together to form a 3d model. Otherwise they would have spent years tweaking animations to get that kind of organic movement. I have a feeling that much of the physics is pre calculated and recorded from cg actors into a series of animations.

Otherwise they are using one heck of a physics engine.
I am not so sure this is too terribly advanced, as good as it does look.
It’s a combination of IK, FK, and physics.

Basic animations such as swinging the arms are likely FK, but not run in a standard sense. Unlike standard FK, they get to the desired position within the animation by determining what physical impulse to apply to each joint to go from the current position to the desired position. Limitations on the sizes of impulses allow the movements to get off track from what was originally modeled in Maya without immediately jumping back on track on the next update.
This means if an arm gets hit while swinging, gets pushed down a bit, it has to get back up to its target position over a series of frames, resulting in much more dynamic and fluid motions.

The feet are IK, and likely use something similar to Sumotori Dreams to keep the player balanced and upright.
This is a bit advanced but not new (since it was already done in Sumotori Dreams). Since the only task is to keep the player upright it could actually be simplified greatly so that any standard IK algorithm could be applied (again, with impulses to drive the joints to their target positions).


Once the animations are using nothing but impulses to get to their target frames, any standard physics engine could then take over to run it. There is nothing special about the physics engine etc.

Of course breaking the skeletons means breaking the relationships between the joints of it and then using standard physics to repel them off the ball-and-chain.


All-in-all, very practical to implement. Only the way the animation system runs needs to be modified, and that modification is trivial, since it is extremely easy to calculate what kind of impulse needs to be applied to get from one orientation to another over a fixed amount of time.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid


All-in-all, very practical to implement. Only the way the animation system runs needs to be modified, and that modification is trivial, since it is extremely easy to calculate what kind of impulse needs to be applied to get from one orientation to another over a fixed amount of time.


Could you explain how you would go about making those calculations? I'm considering implementing this and some other things...
_______________________________________________________________________________
CEO & Lead Developer at ATCWARE™
"Project X-1"; a 100% managed, platform-agnostic game & simulation engine

Please visit our new forums and help us test them and break the ice!
___________________________________________________________________________________
Since we are only operating on joints and we assume them to be infinitely small (there is only one place on it we can apply any given force—this is unlike a box where applying a force to one of its corners almost always results in a different result from applying the same force to its center of mass) we don’t need to worry about where the impulse is applied in relation to the center of the joint. That simplifies things greatly.

Also we assume a fixed-interval time step here so that we can know the amount of time that will pass during the next update, because it is in that time that we want to reach the destination position.

So, for an infinitely small point with some mass, given an impulse over a given amount of time, the point will move by this much:
(F/M)*t
Where F is a force vector (and is 3D), t is time, and M is the mass of the object. Usually physics simulations store the inverse mass in order to avoid a division, and we are of course not accounting for friction or damping here (no need).

So you know where you are, you know where you want to be, you know your mass, and the amount of time you want it to take to get to the target.
D = 3D vector from starting point to end point.
D / t = How long it would take an object whose mass is 1 to get there in the given amount of time.
So if you have double the mass you need to apply double the force.
F = M * (D / t)


Of course you can then put a limit on F to make sure the arm (or whatever) doesn’t just jump to the target spot immediately, and this cap can be variable depending on how far away the target position is.
And all these equations should be done in joint-local space, otherwise you would have the hand trying to fly forward really fast when actually the rotation only involves the shoulder joint.
Convert the forces to world space afterwards.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

Hmmm... They're asking a LOT of money for a project of not well-known people. "We're... It doesn't matters really. Point is, we want a quarter million dollars please."

Though their project looks like it could require such amount of money, by that I mean it may be too ambitious.

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

Does anyone know how to implement the physics collision at 00:59 in this clip:
https://www.youtube....h?v=PvZchE30StQ

It seems very accurate

Does anyone know how to implement the physics collision at 00:59 in this clip:
https://www.youtube....h?v=PvZchE30StQ

Fixed that for you. That's just standard rigid body physics. Nothing special. Pretty much any rigid body physics engine will do, and even then there are more impressive things. Exactly how he auto-generated the collision mesh from the graphical mesh, I'm not sure, but there are various methods (assuming he generates a poly-reduced mesh; he could be using the full mesh, but for high-poly models that's computationally expensive).

@L. Spiro: how costly (CPU-wise) are such animation/physics combinations?
[size=2][ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]
I can really only estimate, but the extra overhead shouldn’t be too much, especially since you can avoid divides (inverse of time is a constant for the whole frame and should only be done once per frame).
Standard performance tips apply: Since it is per-bone, if it is too heavy, reduce the number of bones etc. But compared to what has to be done to the bones involving matrix multiples etc., this extra overhead will likely go unnoticed, so overall I would just say, “Negligible”.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

This topic is closed to new replies.

Advertisement