Horde3D

Next-Generation Graphics Engine
It is currently 22.12.2024, 06:13

All times are UTC + 1 hour




Post new topic Reply to topic  [ 11 posts ] 
Author Message
PostPosted: 08.01.2008, 16:12 
Offline

Joined: 08.01.2008, 14:57
Posts: 66
Hi! I'm new with Horde3d: it sounds like a very good designed 3d graphics engine.

I want to make some questions about its structure:

1. Horde3D is a "next gen" graphics engine, but is it possible to use the fixed pipeline too?

2. Horde3D is "only" a renderer, with (graphics) resource managment. Suppose i want to make a high-level engine which uses Horde3D for graphics (and, for example, OpenAL for audio, Bullet Physics for physics calculation, etc.): i think the best design should have separated and interconnected "managers" for a clearer component structure, so what do you think about to divide "resource management" from "scene objects management and rendering" in two different branches of Horde3D project? In this scenery it would be possible to create an high-level engine which uses “Horde3D Renderer and Scene Management” like one (or two separated) component(s) and extends “Horde3D Resource Management” (with Collada support) to import audio, video and game logic resources.

Code:
High-Level Engine
 | | | | | |____________________ Horde3D Renderer
 | | | | |______________________ Horde3D Scene Management
 | | | |________________________ Extended Horde3D Resource Management
 | | |__________________________ OpenAL(or similary)-based Sound Engine
 | |____________________________ Bullet(or similary)-based Physics Engine
 |______________________________ etc...


I think that an high-level all-in-one engine based on Horde3D might be very attractive and powerful!

What is your opinion?

Bye!

Emanuele “Zuck” Bertoldi


Last edited by Zuck on 04.10.2013, 12:27, edited 1 time in total.

Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 08.01.2008, 18:48 
Offline

Joined: 19.11.2007, 19:35
Posts: 218
Answers:

1) Yes. Horde's pipeline is flexible. The Chicago example's pipeline "pipeline_chicago.xml" contains both deferred and forward shading. By default the deferred shading is commented out but you can easily edit the pipeline to use it instead of forward shading.

2) You can go about it anyway you like. Though I'd read about Horde's node attachments of its integration support in the Horde Manual
http://www.nextgen-engine.net/docs/_usageguide.html#Integration

Opinions)

Quote:
I think that a high-level all-in-one engine based on Horde3D might be very attractive and powerful!


Yes I agree with that (mostly) or I wouldn't be a quarter way through toolset development.

I disagree with your approach to design. Design from the a lower perspective first and you'll find out just how much engineering you really need.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 08.01.2008, 19:14 
Offline

Joined: 08.01.2008, 14:57
Posts: 66
AcidFaucet wrote:
2) You can go about it anyway you like. Though I'd read about Horde's node attachments of its integration support in the Horde Manual
http://www.nextgen-engine.net/docs/_usageguide.html#Integration


Yes, but in that page there are only a few rows about this argument. The attachment data approach sounds interesting!

Quote:
I disagree with your approach to design. Design from a lower perspective first and you'll find out just how much engineering you really need.


Can you explain more this point, please?
:wink:


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 08.01.2008, 23:09 
Offline

Joined: 19.11.2007, 19:35
Posts: 218
Explaining more:
There's nothing inherently wrong with your approach, I'm actually making several assumptions about your design which may be false.

Think about when you're actually binding all these different things into a final object like an entity, special effect, weapon, sound emitter, etc. Figure out how all that should work before you start even thinking about systems.

Look over what you wrote for a high-level engine. Doesn't it look more like a wrapper than anything else?

Right off the bat it looks more like you've been thinking about the "How" of nothing instead of the "How" of "what."

There's Doom, Unreal, CryTek, Source, and etc engines for reasons aside from, "Well we'd like to code it ourselves and maybe save some money too while making money licensing it out." They have their own needs.

I'm willing to bet that no one on any of those teams is one of the true top 100 programmers in the world. All of the super-elite most likely go unnoticed working a 'normal' programming job.

Yet all those engines outperform the generalized Yake engine. Yake is even opensource, so why isn't Torvaldes' law of bugs helping it become of faster? There's nothing wrong with Yake, but it's built as a "How" to a vague generality and not to specific needs, so it does general well, but general doesn't mean that it performs well across the board.

Moral of the Story
If you have your specific needs and know how your lower level stuff will work then your higher level stuff will all fall into place.

This is why I only "mostly" agreed with:
Quote:
I think that a high-level all-in-one engine based on Horde3D might be very attractive and powerful!


An engine built with Horde3D that knows what it wants to do and does it, will be attractive and powerful.
An engine built with Horde3D that says "I want my hand in every cookie jar." will either suffer the woes of generality or never be completed.

-----------------------------------------------

You can't be a bodybuilding, fashionable, brilliant, conoisseur of: alcohol-jewels-drugs-history-math-psychology-philosophy, backpacking, surfboarding, jetskiing, daredevil motorcycling, skydiver who's an expert on all subjects yet unlisted (unless you're James Bond).

You can however be a Conoisseur of alcohol who is pretty good at math, intimate with the philosophical classics, is in decent shape, and has a modest collection of D&G belts and but still mostly wears Express.

-----------------------------------------------

It applies to programs, think low and you save yourself a lot.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 08.01.2008, 23:43 
Offline
Engine Developer

Joined: 10.09.2006, 15:52
Posts: 1217
Hi Zuck,

1) I guess you mean if Horde could use the fixed function pipeline for old hardware without shader support? That's practically not possible since most features are based on shaders. Of course it is easily possible to get some simple rendering on fixed function (in fact the wireframe debug mode (F7 key) is fixed function) but nothing really useful.

2) What you propose would make Horde ultimately a game engine. As AcidFaucet indicates generic game engines are hard to make since every game has its very own needs (some have destructible environments, others enormous landscapes and some might play in small dungeons but have hundreds of characters). For each of these requirements you need a specific design approach to make things efficient. Futhermore for a game engine you need many more things which Horde currently doesn't have like events, a messaging system, threading, io routines and so on.

I probably wouldn't try to share the Horde resource manager for a game engine. It is perfect for Horde but your game probably needs more specific features like loading of resources from archives, threaded background loading or similar. I would suggest that you write a separate resource manager for your game engine which does what you need and just forwards graphics related data to the Horde manager. The advantage of this approach is that it is much safer since you don't have to touch the graphics code and it can't happen that the rendering suddenly breaks because of some changes in the Horde managers. In general I would consider Horde as a closed component, a component only responsible for displaying your data.

An example: In a game engine your world could consist of a list of entities and some can have a graphical representation. These objects that have a graphics component could just store a handle to the corresponding scene graph node which gets updated when the object is moved. Of course this is just one idea to realize an object model for a game engine, there are many more all with their pros and cons.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 09.01.2008, 00:59 
Offline

Joined: 08.01.2008, 14:57
Posts: 66
Hi Marciano ;)

1) Ok, no fixed pipeline. Thanks ;)

2) First: i don't want to invite you to make Horde3D a complete game engine, ok? ;)

My previous post is only a question about a possible (quite small) change of Horde structure for simplify the life of user programmers who want to use Horde3D as the rendering component in their high-level game engines (obviously this is my wish too :P).

This is my idea: Horde3D would be a indipendent component of a high-level engine, like in the block schema of the previous post. Nothing of game engine details should be entered in the Horde code but viceversa.

I don't ask you to code an engine, i ask you if is it possible to lightly modify the horde structure (if you consider it a good solution) to permit third-part programmers to make complete game engines based on your Horde work (because Graphics, Scene Management and the major part of Resource Management are already implemented) ;)

- Current:
Image
Link

- Proposed:
Image
Link

This is only a design possible idea ;)


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 09.01.2008, 03:52 
Offline

Joined: 19.11.2007, 19:35
Posts: 218
I'd suggest you do a few demos just in Horde before you decide to wrap parts up in two new namespaces/objects (w/e you've chosen the package as a substitute for). You may want to refresh on O-O design a bit. Wrappers are not good solutions to most problems.

Might want to think about why you're binding outside stuff with Horde's resource manager. Odds are that you shouldn't.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 09.01.2008, 04:05 
Offline

Joined: 08.11.2006, 03:10
Posts: 384
Location: Australia
I'm currently working on a "Game-engine" which uses Horde3D as the rendering module, and I'm quite happy with the level of integration provided by the current resource manager implementation.

Horde's resource manager doesn't actually do any loading of data, it leaves that up to the application. This means that my engine's resource manager can easily wrap-up horde resources already (without having to modify Horde at all), in order to provide an interface that is consistent with the rest of my engine.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 09.01.2008, 13:58 
Offline

Joined: 08.01.2008, 14:57
Posts: 66
Hi DarkAngel! ;) So, your implementation is similar to the first image?

Repeat: i don't want to change nothing in Horde, i only ask you the best solution to make a high-level game engine with Horde3D for graphics. I've proposed my solution but it's only a proposal: if there are other better solutions to make this (i hope), i'm listening to you ;)


Last edited by Zuck on 04.10.2013, 12:30, edited 1 time in total.

Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 10.01.2008, 04:52 
Offline

Joined: 08.11.2006, 03:10
Posts: 384
Location: Australia
Yes, it's similar to your first image.

I've got a resource manager class which has lots of functions like LoadScene(char*filename), LoadAnimation(char*filename), LoadMaterial(char*filename), etc...

Then I've got a set of classes to represent each of these resources. All of my horde wrapper resource classes implement from CHordeResource, which contains a Horde3D ResHandle.

so my implementation of a Scene resource is something like:
Code:
class CHordeResource : public ReferenceCounted
{
public:
  CHordeResource() : m_ID(0) {}
  ~CHordeResource()
  {
      Horde3D::removeResource( GetID() );
  }
protected:
  void SetID( uint i ) { m_ID = i; }
  uint GetID() { return m_ID; }
private:
 uint m_ID;
};
typedef MySmartPointer<CHordeResource> CHordeResourcePtr;

class CScene : public CHordeResource
{
public:
 /* get/set position, rotation, etc...*/

private:
 friend class CResourceManager;
  CScene( const char* file )
  {
     SetID( Horde3D::addResource( Horde3D::ResourceType::SceneGraph, file, 0 ) );
  }
};
typedef MySmartPointer<CScene > CScenePtr;


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 13.01.2008, 01:57 
Offline

Joined: 08.01.2008, 14:57
Posts: 66
ok, thanks! ;)


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 12 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group