Frame Time Calculator: FPS to ms Frame Budget
Pick a target frame rate to get the frame time in milliseconds, then split that budget across rendering, physics, scripts, audio, UI and headroom. The calculator also shows how many physics ticks run per rendered frame, an FPS to ms table from 30 to 240 FPS, and the project.godot lines that set Godot 4 to match.
60 FPS = 16.67 ms per frame
How to use it
- Pick 30, 60, 90, 120, 144 or 240 FPS or type a custom rate, choose whether V-Sync is on, and press Next.
- Drag the sliders to split the frame between systems; the others adjust so the total stays at 100%. Press Next.
- Pick the physics tick rate or type your own.
- Press Calculate frame budget to see milliseconds per system, physics ticks per frame and the reference table.
- Press Copy project.godot lines and paste them into your project.
FPS to milliseconds
Frame time in milliseconds is 1000 divided by the frame rate. 30 FPS gives 33.33 ms per frame, 60 FPS gives 16.67 ms, 90 FPS 11.11 ms, 120 FPS 8.33 ms, 144 FPS 6.94 ms and 240 FPS 4.17 ms. Everything the game does in a frame, from scripts to rendering, has to fit in that time or the frame is late.
Going from 30 to 60 FPS halves the budget, which saves 16.67 ms. Going from 120 to 144 FPS only takes 1.39 ms away, but it is 1.39 ms out of 8.33, so the higher you aim the more each millisecond counts. Profile in milliseconds rather than FPS, because a 1 ms cost means the same thing at any frame rate.
Leave headroom. Frame times vary from frame to frame, and the slowest frames are the ones players notice, so a budget that is 100% used on an average frame will drop frames in busy scenes.
Physics ticks and rendered frames in Godot
Godot runs physics and _physics_process() at a fixed rate set by physics/common/physics_ticks_per_second, 60 by default, while rendering runs as fast as the FPS cap and V-Sync allow. At 30 FPS with 60 ticks, every frame runs two physics ticks; at 144 FPS, most frames run none and some run one.
Godot simulates at most physics/common/max_physics_steps_per_frame ticks in one frame, 8 by default. If the frame rate drops below the tick rate divided by that limit, the game appears to slow down, so raise the limit when you raise the tick rate a lot. The calculator adds that line for you when a frame at your target needs more than 8 ticks.
When ticks and frames do not line up, objects that move in physics can look jittery. Physics interpolation (physics/common/physics_interpolation) smooths this by drawing objects between their last two physics positions. It arrived in Godot 4.3 for 2D and Godot 4.4 for 3D.
The Godot 4 settings the calculator writes
application/run/max_fps caps the frame rate; 0, the default, means no limit. display/window/vsync/vsync_mode is 1 (Enabled) by default; 0 is Disabled, 2 Adaptive and 3 Mailbox. With V-Sync enabled the frame rate cannot go above the monitor's refresh rate, whatever max_fps says.
Godot reads all of these when the project starts. To change them while the game runs, set Engine.max_fps, Engine.physics_ticks_per_second or call DisplayServer.window_set_vsync_mode() instead.
Frequently asked questions
How many milliseconds is 60 FPS?
How do I convert FPS to frame time?
What is a frame budget?
How do I cap the frame rate in Godot 4?
Should physics run at the same rate as the frame rate?
More free game dev tools
- Pixel Perfect Resolution Calculator: Check how a pixel art resolution scales on real screens and get the Godot settings.
- Godot Tween Easing Visualizer: See how each Godot Tween transition and ease type moves, then copy the tween code.
- DPS Calculator: Balance combat: DPS with crits and armor, time to kill, and two builds compared.