Why do gamers chose frame rate of 30f/s for their games?

Started by
9 comments, last by speciesUnknown 16 years, 1 month ago
Why do gamers chose frame rate of 30f/s for their games? Recomend me some beginers books on programming 3d games please. cheers
Advertisement
If they choose 30 it's usually because they can't get their game to run at 60.

The reason 30 and 60 are most commonly used are that TV refresh rates are 60Hz (at least NTSC TVs), so if the framerate is locked to 60 or 30 the game refreshes in sync with the TV and prevents ugly artifacts like screen tearing.
A decent explanation can be found here: 30fps vs. 60fps
"Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music." - Kristian Wilson, Nintendo, Inc, 1989
Quote:Original post by xDS4Lx
A decent explanation can be found here: 30fps vs. 60fps

Interesting article there.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

I firmly believe that mouse lag can be detected at framerates below 90, down to my own experimentation (asking friends if they can feel the difference before and after I press a button which switched teh framerate from 90 to 60. They had no idea what the button did, and the refresh rate fo the screen was 60hz so there would have been no noticeable drop in framerate). I've been unable to explain why, however, since if the refresh rate of the screen remains at 60, how can they see the difference?

Are there any published articles on this stuff I could read? Its a fascinating subject.
Don't thank me, thank the moon's gravitation pull! Post in My Journal and help me to not procrastinate!
Show us an example of this application, with source.
Oh, well speciesUnknown, that should be fairly simple to sort out.
You may only see the response to your actions ever 1/60th of a second, but lets say you refresh input every 1/120th of a second.
That means that you can press a button exactly inbetween frames, and have the game update as if you did so.
I remember back in the days of playing fps's on the n64. everyone fought over first player, because the system appeared
to lump all input, then process in player order. So being the first to pull the trigger only counted if being first put your input
on a different frame. (may not have been what actually happened, but it felt like it)

I'd say it would make the most difference on games that don't sweep collisions. So in 1/60th of a second an object can move out
of the way of where you were pointing, but in 1/120th you could still graze the target.
So even though you have to wait to see the results of your actions, the actions respond to input better.
Quote:Original post by GMuser
Show us an example of this application, with source.


Erm, there are 56 source files. Here is the header file for my demo application:
[edit for typing mistake, its 56 not 156]
/* *  game_engine.h *  game_engine * *  Created by gavin on 06/04/2007. *  Copyright 2007 __MyCompanyName__. All rights reserved. * */ class game_engine;#ifndef game_engine_class_h#define game_engine_class_h 1#include "g_maths.h"#include "SDL_GL_include.h"	//OS generic includes for SDL and OpenGL	#include "input_control.h"	//input control class, which includes keyboard, and mouse input.#include "MD2_manager.h"#include "static_mesh.h"	//model formats. Currenltly, static mesh only loads AC3D files (.ac)	#include "character.h"#include "human_player.h"#include "character_manager.h"	//character system. characters are controlled by either human or Ai players.#include "renderer.h"#include "viewport.h"#include "font_draw.h"	//OpenGL specific renderer.	#include "physics_demo.h"	//Newton GD based physics demo, currently under testing#include "gavs_gui.h"	//custom GUI system.#include <iostream>#include <sstream>enum internal_game_state{	internal_game_state_playing,	internal_game_state_exiting};class game_engine{private:	human_player      * h;	character_manager * cm;	renderer          * r;	static_mesh       * s;	MD2_manager       * test_model;	material_db       * materials;	material          * m;	font_draw         * font;	physics_demo      * d;	GUI_widget        * gui_surface;	GUI_manager       * gui_manager;	GUI_renderer_GL   * gui_renderer;	GUI_event_queue   * event_queue;	input_control     * input_object;		internal_game_state state;	std::string title_message;public:	game_engine();	~game_engine();		int initialize(int X, int Y, int D, int F);		void build_gui();	int initialize_renderer(int X, int Y, int D, int F);	int draw(float fps);	bool handle_events();	int update(float fps);	int main_loop();};#endif


It wasn't a serious test, and this is not serious code, just long code. The animated models were md2 meshes, the level geometry is from a 3d editor called AC3D. Physics are with Newton GD.
Don't thank me, thank the moon's gravitation pull! Post in My Journal and help me to not procrastinate!
Quote:Original post by KulSeran
Oh, well speciesUnknown, that should be fairly simple to sort out.
You may only see the response to your actions ever 1/60th of a second, but lets say you refresh input every 1/120th of a second.
That means that you can press a button exactly inbetween frames, and have the game update as if you did so.
I remember back in the days of playing fps's on the n64. everyone fought over first player, because the system appeared
to lump all input, then process in player order. So being the first to pull the trigger only counted if being first put your input
on a different frame. (may not have been what actually happened, but it felt like it)

I'd say it would make the most difference on games that don't sweep collisions. So in 1/60th of a second an object can move out
of the way of where you were pointing, but in 1/120th you could still graze the target.
So even though you have to wait to see the results of your actions, the actions respond to input better.


Thanks, that's a nice explanation.
Don't thank me, thank the moon's gravitation pull! Post in My Journal and help me to not procrastinate!
Yeah, you don't necessarily have to link your input or simulation framerates to your rendering framerate. One approach would be to run input on a separate thread to rendering.

Richard "Superpig" Fine - saving pigs from untimely fates - Microsoft DirectX MVP 2006/2007/2008/2009
"Shaders are not meant to do everything. Of course you can try to use it for everything, but it's like playing football using cabbage." - MickeyMouse

This topic is closed to new replies.

Advertisement