This is just a review and a study of the mechanics implemented in the game, what possibly was done to make the mechanic happen, and what was done to be optimized or efficient for lower hardware.
It is practically a console port, but it isn't a bad one.
I used my knowledge as a developer to break things down from what I observed, and compared to other examples for a few things.
I thought I might post something here since we're about to hit 2012, and nothing has been posted since 2010.
GAME: Deus Ex Human Revolution
Systems: PC, PS3, Xbox360
Emulatiors: None that I know of.
Deus Ex Human Revolution Analysis:
After playing the game in full after 50 hours, here’s what I have to conclude…
The game has simplistic box and cylinder physics. There’s also rag doll physics.
The player seems to be a basic collision ghost object in the shape of a sphere. This shape is further used for AI visual detection.
When it comes to the player standing on objects, the following can be observed:
The player seems to exert no forces on objects that are being stood on.
I noticed this when I set two boxes roughly centered on a rail against a wall as a frictional surface, which I then proceeded to jump on top of to jump over a high wall. I was on the edge of the boxes in such a fashion that the boxes should have been knocked over by my weight forcing more torque than the wall friction could negate.
Now that I think about it, there were almost no cases where torque in general could be observed.
I tested for this in the Source Engine as used in Portal 1. The objects do fall over with my weight on an unbalanced setup. The source engine has more realistic physics in the case of standing on things.
When it comes to the player bumping into objects, the following can be observed.
There seems to be a 100-200 ms, possibly purposeful, lag before the object will move when the user collides with said object. It could be the result of ground friction, though it could just be a simulated lag to give the user a notice that they are indeed colliding with another mass-filled space.
Most of the layout in Deus Ex is a static physics tree, so there aren’t many objects to manipulate the environment with, except for moving around boxes, crates, fire extinguishers and breaking glass with a gun.
However, the user can only bump into large specific objects, such as boxes, large crates and vending machines. All other items are not considered when collision occurs. Such is the case with rag doll bodies, guns, ammo, and other various small things, like fire extinguishers.
Rag dolls however do collide with the smaller objects, such as guns.
When it comes to ground detection, this is what I hypothesize is happening.
There are two cylinders, one that has the width of slightly less than the diameter of the sphere I hypothesize represents the player, another that is slightly larger than the diameter.
The two cylinders create a list per frame of what they are colliding with, excluding the other and the sphere. When the two cylinders do not have lists of equal length, the smaller cylinder is used. This way, we aren’t counting a wall as something that we are standing on. However, when there is no wall around, and the larger is used, this gives the player a bit more tolerance in foot room.
When the inner cylinder has no contact, the player is considered free-falling.
To clarify on the specifications of the cylinders, I believe that they are the height of the player’s shape, plus a little and then shifted down a constant. I have yet to figure out what the constant is, or a margin of what it should be. The idea is though, that it is long enough, that if the platform beneath were going towards gravity but not at the acceleration of gravity, then we should still be able to walk on such a platform.
Continuing floor detection:
In Deus Ex HR, elevators and other moving platforms still allowed for movement, but declined to allow jumping. This may be so that players didn’t kill themselves from fall damage while in elevators(now that would just be silly) because the engine was not taking into account the relative velocity of what was underneath.
Next is crouching and potential space the player could move in.
As previously mentioned, I hypothesize that the player is represented as a sphere. While the player is in a normal posture, such as standing, walking or running, the sphere is the height/width of the max of the base of the head to the belt-line and the width of the shoulders. Its most likely the shoulders.
When the player crouches, the sphere is simply brought to the ground.
There is an interesting case when the player is brought to the following situation
The player is presented with a wall that they are facing. There is a vent at upper-chest level. In DEHR, the player will automatically go into the vent and be in crouch mode. Depending on the player’s settings/preferences, the crouch is toggled when they enter this mode.
Here’s my hypothesis on what’s going on to allow this. It may be something entirely contextual, or a simulation test. If a simulation test, the engine is simulating dual cylinders again, but they are only as long as the sphere is deep(or its diameter). The cylinders are facing so that the round side is facing the ground, and the flat sides are facing the user’s chest/face and directly in front. Both cylinders are placed in front of the user, the center of the circle face is between the chest and head. The second cylinder is slightly smaller for tolerance reasons. Now if the smaller cylinder can fit in the space without any static physical objects in the way, then a second test is ran. This is where the larger cylinder is used. There would likely be 2 tests which are simply to find the center of the vent hole. Since we know the points of contact already, we now shift away from those points of contact. Now, we detect if the cylinder is still contacting something. If not: we can proceed and enter. If we are contacting something, then we calculate relative to the first set of points where the center would be and move there. This is the second test. If there are no contacts, then we are free to enter.
Normal crouching, like any other movement test will be a “Can my sphere go here without any contacts?” if so, then allow the movement to occur. Otherwise, calculate if the contact is at a non tangent angle. If so, then calculate with cosine where the object can go with a decreased force/velocity.
The same happens with walking. If you walk at a tangent angle directly to a wall, then you might as well be testing the cosine of 90 deg which is 0. Now in the case of walking towards a corner where the sphere is in contact with two walls, depending on the yaw of the view, then the forces will be negated. Either way, until the user changes their plan of walking into a wall, it will become a harmonic motion of moving where the forces go between walls to find equilibrium.
Ground friction with the player and objects
It can be observed with a box on a sloped road that it will slide down. However it will slide down at a slow rate and stop after a foot or so, depending on the incline. There does seem to be a simulation of ground friction for small objects.
With the player, there are no areas/levels where the surface is slippery. I’m betting that it is a situation where the character’s velocity is averaged and reduced to 0 after 35-100ms
There are no cases of vertical velocity averaging as all cases of moving platforms are locked in terms of jumping(it can’t be done)
There are numerous tricks employed to have low geometry but high visuals. Most of it has to do with bump, parallax and normal mapping. Examples include the vent lines and indention of where they would, if real life, connect; brick walls, asphalt on roads, et al.
There are also many shaders that seem to be in effect. I noticed that the rails were square in form, but looked cylindrical by how the lighting shown on them. It is likely that they are in fact square extrusions which have a shader applied where it seems like the light looks reflective as if cylindrical.
Next up are the newspapers that will sometimes, as an environmental decal, fly up from random winds and disappear in the sky. The newspapers looked like it was at most 3 polygons which would be randomly twisted(pre-animated) which would have interpolated keyframes of rotation and position as they fly up, and then fade.
They also used lower-resolution geometry as a form of art, as seen in the Biotech labs tower, where the furniture had solid-sculpted-white-granite sides which had large triangle sides.
They used many portals. Not in the sense of Portal the game, but in an older designing sense. When presented with a large scene outside, there were not many features which were geometrically complicated. When you went through a doorway, you usually enter a small room, or a corridor. When you pass through the other side of said area, then you enter another area which is rendered separately from the rest of the world. Such world partitioning is a speed increase when it comes to pre-enumerated objects which are in the area to be considered to render, as opposed to generating this list in runtime periodically or even each frame.
In older game engines, if you didn’t specify portal sections when level designing, then it would render the whole world and become very slow.
Though not necessary for many computers of today, it was likely implemented to assist consoles with limited memory or resources such as the Xbox360 or PS3(it has 256MB of RAM and 256MB of VRAM)
They had a very decent Level Of Detail(LOD) system. They switched textures on separate intervals than they did with models. They seemed to have more levels in textures than with models. I think they had 4 texture levels and 3 model levels.
Regarding human conversation and movement, They seemed to have too much weight on random bumpiness with the human muscles. Try holding your hand in front of you about a foot away and try to hold it still. You may notice small twitches and shaking. Most places that implement this do not provide it at a realistic level. The face seemed to be a completely different animation system than the rest of the body. While in conversation they usually had the neck move around, as well as gestures with the arms that were generic.
As most games do, they did not include any working mirrors, which may show how weird the player’s character may be holding things in order to get it to look right for the first person camera view. When changing to a third person perspective, the animation is likely to be averaged/morphed to the third person animations while the camera swings slightly away from the player and to where the target is when doing stealthy moves.
This is essentially a copy and paste from my blog that I sometimes post to.
I'm not the best writer. Did I make sense?
Edited by Alpha, 16 December 2011 - 09:21 AM.