Collisions: Difference between revisions
(completed text, visuals needed) |
(added visuals.) |
||
Line 1: | Line 1: | ||
Minecraft's collision physics is very simplistic, |
Minecraft's collision physics is very simplistic: instead of ray-tracing the collisions, the game simply moves the player sequentially along each axis. |
||
Instead of ray-tracing the collisions, the game simply moves the player sequentially along each axis. |
|||
As a reminder, Minecraft's physics is updated 20 [[ticks]] per second. The player's movement and collisions are updated once per tick. |
As a reminder, Minecraft's physics is updated 20 [[ticks]] per second. The player's movement and collisions are updated once per tick. |
||
== Collision Box == |
|||
A '''collision box''' consists of one or multiple bounding boxes, which are simple cuboids define by minimum and maximum X/Y/Z coordinates. |
|||
* The player only has one bounding box, of dimensions '''0.6'''×'''1.8'''×'''0.6''' m<sup>3</sup>. Their position (as shown in F3) is located at the bottom center |
|||
== Order of collisions == |
|||
* Blocks have more complicated collision boxes (see [[Blocks|this list]]). |
|||
Note: a "hitbox" is what the player can click on (e.g. attack an entity, press a button, open a door). It may or may not overlap with the collision box. |
|||
[[File:Collision box (player and block).png|frameless|720x720px]] |
|||
== Collision Order == |
|||
Every tick, after the player's velocity has been updated, the game does these steps to check collisions: |
Every tick, after the player's velocity has been updated, the game does these steps to check collisions: |
||
* Move the player along the Y axis. If a vertical collision is detected |
* Move the player along the Y axis. If a vertical collision is detected while moving downward, the player is now considered to be on ground. |
||
* Move the player along the X axis. |
* Move the player along the X axis. |
||
* Move the player along the Z axis. |
* Move the player along the Z axis. |
||
* If the player is on ground and collided with a wall, |
* If the player is on ground and collided with a wall, they are able to step over it if it's less than 0.6m tall. |
||
** See [[Stepping]] for explanations and visuals. |
** See [[Stepping]] for explanations and visuals. This article focuses on regular collisions. |
||
** This mechanic is responsible for [[Blip|Blips]] and [[Jump Cancel|Jump-Cancel]], and their glitched variants. |
** This mechanic is responsible for [[Blip|Blips]] and [[Jump Cancel|Jump-Cancel]], and their glitched variants. |
||
Line 21: | Line 29: | ||
* The player is able to jump one tick after running off a block. In particular, this is why [[Timings|headhitter timing]] works. |
* The player is able to jump one tick after running off a block. In particular, this is why [[Timings|headhitter timing]] works. |
||
* To land on a block, the player must be above its surface on the final tick of the jump. |
* To land on a block, the player must be above its surface on the final tick of the jump. |
||
[[File:Y Collision.png|frameless|720x720px]] |
|||
== X/Z Facing == |
== X/Z Facing == |
||
Due to the X axis being processed before the Z axis, |
Due to the X axis being processed before the Z axis, corner collisions don't behave the same depending on the direction. |
||
This mechanic is especially noticeable the more speed the player has. |
|||
[[File:XZ collision.png|frameless|720x720px]] |
|||
It's important to distinguish "X-facing" jumps from "Z-facing" ones: |
|||
* '''X-facing''' refers to jumps that point towards East/West. |
* '''X-facing''' refers to jumps that point towards East/West. |
||
* '''Z-facing''' refers to jumps that point towards North/South. |
* '''Z-facing''' refers to jumps that point towards North/South. |
||
⚫ | |||
Players tend to find Z-facing neos more intuitive, but X-facing neos can actually be |
Players tend to find Z-facing neos more intuitive, but X-facing neos can actually be more lenient: |
||
* Z-facing neos are very similar to linear jumps. To convert a neo to its equivalent, simply add 1.2 to its distance and increase its [[Tiers|tier]] by one. For example, a triple neo is equivalent to a "4.2+0.25" (which cannot be built, but this sort of comparison is useful for analysis) |
* Z-facing neos are very similar to linear jumps. To convert a neo to its equivalent, simply add 1.2 to its distance and increase its [[Tiers|tier]] by one. For example, a triple neo is equivalent to a "4.2+0.25" (which cannot be built, but this sort of comparison is useful for analysis) |
||
* X-facing neos don't have a linear equivalent. Compared to Z-facing neos, they are "shifted" by 1 tick (wall collision begins and ends 1 tick earlier). This shift reduces the momentum, but makes it more efficient as the player typically has more speed at the end of |
* X-facing neos don't have a linear equivalent. Compared to Z-facing neos, they are "shifted" by 1 tick (wall collision begins and ends 1 tick earlier). This shift reduces the momentum, but makes it more efficient as the player typically has more speed at the end of a jump than at the start. |
||
Some jumps are only possible when facing one axis or the other |
Some jumps are only possible when facing one axis or the other (for example, a 2bm triple neo is only possible X-facing) |
||
⚫ | |||
== 1.14+ == |
== 1.14+ == |
||
Line 45: | Line 62: | ||
* Otherwise, the collision order is '''Y-Z-X'''. |
* Otherwise, the collision order is '''Y-Z-X'''. |
||
In most cases, all collisions now resemble X-facing. Some jumps which involve cutting corners may |
In most cases, all collisions now resemble X-facing. Some jumps which involve cutting corners may be very different compared to pre-1.14. |
Revision as of 13:37, 24 May 2021
Minecraft's collision physics is very simplistic: instead of ray-tracing the collisions, the game simply moves the player sequentially along each axis.
As a reminder, Minecraft's physics is updated 20 ticks per second. The player's movement and collisions are updated once per tick.
Collision Box
A collision box consists of one or multiple bounding boxes, which are simple cuboids define by minimum and maximum X/Y/Z coordinates.
- The player only has one bounding box, of dimensions 0.6×1.8×0.6 m3. Their position (as shown in F3) is located at the bottom center
- Blocks have more complicated collision boxes (see this list).
Note: a "hitbox" is what the player can click on (e.g. attack an entity, press a button, open a door). It may or may not overlap with the collision box.
Collision Order
Every tick, after the player's velocity has been updated, the game does these steps to check collisions:
- Move the player along the Y axis. If a vertical collision is detected while moving downward, the player is now considered to be on ground.
- Move the player along the X axis.
- Move the player along the Z axis.
- If the player is on ground and collided with a wall, they are able to step over it if it's less than 0.6m tall.
- See Stepping for explanations and visuals. This article focuses on regular collisions.
- This mechanic is responsible for Blips and Jump-Cancel, and their glitched variants.
Vertical Collisions
Vertical movement is processed before horizontal movement. Due to this:
- The player is able to jump one tick after running off a block. In particular, this is why headhitter timing works.
- To land on a block, the player must be above its surface on the final tick of the jump.
X/Z Facing
Due to the X axis being processed before the Z axis, corner collisions don't behave the same depending on the direction.
This mechanic is especially noticeable the more speed the player has.
It's important to distinguish "X-facing" jumps from "Z-facing" ones:
- X-facing refers to jumps that point towards East/West.
- Z-facing refers to jumps that point towards North/South.
The axis of a jump can be checked with F3.
Players tend to find Z-facing neos more intuitive, but X-facing neos can actually be more lenient:
- Z-facing neos are very similar to linear jumps. To convert a neo to its equivalent, simply add 1.2 to its distance and increase its tier by one. For example, a triple neo is equivalent to a "4.2+0.25" (which cannot be built, but this sort of comparison is useful for analysis)
- X-facing neos don't have a linear equivalent. Compared to Z-facing neos, they are "shifted" by 1 tick (wall collision begins and ends 1 tick earlier). This shift reduces the momentum, but makes it more efficient as the player typically has more speed at the end of a jump than at the start.
Some jumps are only possible when facing one axis or the other (for example, a 2bm triple neo is only possible X-facing)
1.14+
In 1.14, the collision physics were updated. The collision order now depends on the player's velocity:
- If the player has more Z speed than X speed, the collision order is Y-X-Z.
- Otherwise, the collision order is Y-Z-X.
In most cases, all collisions now resemble X-facing. Some jumps which involve cutting corners may be very different compared to pre-1.14.