Dynamic algorithm selection in Irrlicht

Discuss about anything related to the Irrlicht Engine, or read announcements about any significant features or usage changes.
Post Reply
CodeGen
Posts: 13
Joined: Tue Apr 21, 2009 5:12 pm

Dynamic algorithm selection in Irrlicht

Post by CodeGen »

Hello, everyone!
Irrlicht is extremely easy to use, but the interface to the engine can be made even simpler.
We need an intelligent world manager with dynamic algorithm selection.
This manager should be able to optimize the scene for quickly responding to sequences of geometric queries.
( Are such things possible in C++ where logic is hardcoded ? )
In pseudocode:

Code: Select all

class WorldManager {
public:
            // ctors, dtors, etc.
            // ...

	//--- Interface will be MUCH simpler. Let the engine decide which algorithms to use.
	// The user of the engine won't need to know about, say, spatial partitioning algorithms,
	// needn't specify exact types of scene nodes to create, adjust and experiment with settings,
	// striving to achieve optimal performance, etc.
private:
	// For example, the engine can exploit parallelism, or fast and memory hungry algorithms, or anything else,
	// based on the machine characteristics.
	void	Pre_AnalyzeHardwareCapabilities();
	void	Pre_AnalyzeScene();
	/* Ideally, scenes shouldn't require heavy preprocessing.
	   Internal acceleration structures should be refitted at run-time,
	   using information about how they are used.
	*/

	void	Pre_MarkAreasWithAlgorithms();
#ifdef DEVELOPER_MODE
	// The engine may use neural nets trained by experts.
	void	Pre_AskHumanAboutMyChoice();
	void	Pre_AskHumanToSelectAlgorithms();
#endif
	void	SaveStatistics();

	//--- Dynamic algorithm selection ----------------------------------------------

	void	AnalyzeCurrentScene();

	void	SelectAlgosForRendering();

	/* use deferred, self-organizing, self-optimizing data structures,
	   record usage history and refit them.
	   Real-time PVS generation, selecting occluders,
	   intelligent grouping of display objects ( for collision detection and culling ), selecting different bounding volumes,
 	   culling physics, animations, shadows, special effects, etc.
	*/

	void	SelectAlgosForHandlingCollisions();
	/* use probabilistic, stochastic, non-deterministic algorithms if too many small polygons,
	   approximations( physics LOD ) when the time left for physics is short.
	*/

	/* the engine should learn and experiment, recognize patterns.
	*/

	void	SelectBoundingVolumes();
	void	RefitAccelerationStructures();

	void	Schedule();
	void	Predict();

	void	Remember_achieved_FPS_and_Algorithms_used();
	void	UpdateStatistics();

	void	ReconsiderCurrentChoice();

	// ...

#ifdef DEVELOPER_MODE
	void	AskHumanToClassifyTheScene();	// indoors/outdoors, closed/open, static/dynamic, structured/unstructured, etc.
	void	AskHumanWhichTechniquesArePreferred();
#endif

/* Havok ( Bullet ) has something similar to this.
private:
	PriorityQueue< Task >	m_pendingTasks;
	List< Task >			m_scheduledTasks;
         // ...
*/
};
I think this will be implemented in the future. By that time, Neural Processing Unit or something will be invented ( similar to GPU, PPU ), it won't be
uncommon to install several such add-on cards.
Last edited by CodeGen on Wed Apr 22, 2009 4:17 am, edited 1 time in total.
MasterGod
Posts: 2061
Joined: Fri May 25, 2007 8:06 pm
Location: Israel
Contact:

Post by MasterGod »

Hey, Welcome.

Please edit your post and put the code text under code tag so it would be easy to read it.
Thanks.
Image
Dev State: Abandoned (For now..)
Requirements Analysis Doc: ~87%
UML: ~0.5%
eye776
Posts: 94
Joined: Sun Dec 28, 2008 11:07 pm

Post by eye776 »

@CodeGen:
I think this will be implemented in the future. By that time, Neural Processing Unit or something will be invented ( similar to GPU, PPU ), it won't be
uncommon to install several such add-on cards.
Where would you get the money for even just ONE of the cards ?

Apart from that, it's an interesting ideea.
Post Reply