Looking for a 3D /Rendering/ Engine

Miscellaneous Forums/General Discussion/Looking for a 3D /Rendering/ Engine

I am looking for a 3D graphics engine.
No, not an "everything and the kitchen sink" engine, I want a system that abstracts and simplifies the rendering of 3D scenes, making that process as fast as possible without me having to think about it.
I do not want it to do collisions, height maps, networking, sound or physics. I do not want any more than one "move object" function unless having an additional one has a positive impact on performance.

All I want is a dead simple system that handles the graphics and only the graphics in as clean, efficient and easy a way as possible. (This should also make for very few functions to worry about).
I want it to do one thing (abstracting and simplifying the rendering of good looking real time 3D graphics - with nice materials and lighting - across platforms) and to do that thing well.

In my opinion, that alone can be a complicated thing to deal with, so I don't see why engines go so far beyond it. Is there a graphics engine anywhere that strives to be this simple, leaving the game up to me instead of bouncing around trying to help with things that it is incapable of doing to my specifications?

OpenGL?

I am looking for something a tiny bit higher level than the APIs, though, that still does the graphics stuff but does not do anything else that I would rather do myself.
I still want something that makes graphics nice to deal with and is abstract enough that I can switch freely between APIs.

Go with OpenGL. I seriously doubt you'll be able to find what you're looking for because of what you're asking.

Blitz3D? ...apart from the cross platform thing.

Rage3D, not cross platform though.

http://www.rage-game-engine.za.net/

kev

In my opinion, that alone can be a complicated thing to deal with, so I don't see why engines go so far beyond it. Is there a graphics engine anywhere that strives to be this simple, leaving the game up to me instead of bouncing around trying to help with things that it is incapable of doing to my specifications?

Definitely. In fact, you're whole post sounds like an exact description of OGRE; it not only meets every requirement you mentioned, but exceeds them in many ways. OGRE, the Object-oriented Graphics Rendering Engine specializes in graphics alone, and is widely considered the best real-time graphics rendering engine available, except for the top-of-the-line AAA engines.

And one of the best things is that it's completely free (open source), and cross-platform. The documentation and community is also extremely good. I'd recommend you check out the gallery here:
http://www.ogre3d.org/index.php?set_albumName=album07&option=com_gallery&Itemid=55&include=view_album.php

Ogre is officially supported for C++, but there are quite a few wrappers, including all the .NET languages, Python, Ruby, and (soon) BlitzMax [called "Flow", I think].

That is quite a good bit of marketing talk there, John :)
I'll have to play with it for a while so that doesn't go to waste. Their web site is a lot nicer now, too, so I am drawn to it...

I have looked at Ogre's feature set and it sounds to do some odd extra stuff. Is that done via detached modules, then? Sounds like it, but I can't be sure because I'm used to using it through wrappers that do everything.

What about loading assets? Some engines bother me with really specific and arbitrary stuff in that realm, where all the artwork is stored in a particular way and getting it my way (with my own crazy formats) is made oddly difficult.
How is Ogre with that sort of stuff?

Rage3D sounds pretty good, too, (with the exception of some completely random features like "hide or show the Windows cursor", which always nibble at me) but not being cross-platform makes it impossible for this project, unfortunately.

I've rediscovered OpenSceneGraph, and it has a pretty good rendering-oriented feature set...

It sounds like you want OpenGL with matrix maths and a pre-defined mesh structure.

Just take MiniB3D and rip out the stuff you don't want...

MiniB3D is another way to go. I had been pondering that after realizing that a plugins system, which I was fussing over, would be absurd. (It would be better to craft user-friendly, abstracted functions in a way that makes it easy to customize from the outside. After all, BlitzMax already does modules!).

The only trouble there is that MiniB3D is still a tad young, so (while I completely trust in Simon's ability!) a more tried and tested engine would be a bit nicer :)

What about loading assets? Some engines bother me with really specific and arbitrary stuff in that realm, where all the artwork is stored in a particular way and getting it my way (with my own crazy formats) is made oddly difficult.
How is Ogre with that sort of stuff?

It's pretty good, actually. Ogre's resource management system is very flexible and allows you to organize your data any way you want. The only limitation is that you need to register the folders/archives you are going to read from before the resource manager knows where to look for files. But this can be done in real-time if you want, so it's no bother.

However, one "limitation" with Ogre is that it can only load it's own special mesh format (in contrast to it's image loading capability, which can load just about anything). This can be a disadvantage if you have a lot of media already in .3ds/.x/etc. format, but in every other respect this is a great advantage:

- There are Ogre .mesh exporters for just about all major open-source and commercial modeling software

- The .mesh format loads practically instantly, since there's no need to parse anything - it's a straight binary dump of the internal representation of the mesh as far as I know

- .mesh files contain no material data - just the names of materials that each surface uses. Exporters place material data in separate .material files, and it's amazing how easy it is to tweak your mesh's materials with notepad. Practically every rendering feature of your graphics card (and more) can be used with Ogre's amazingly powerful .material files (pixel/vertex shaders, alpha rejection, z offset, custom fixed-function blending modes, animation, material LOD, etc., etc.).

(with my own crazy formats)

And you can implement loaders for your own formats if you want.

I have looked at Ogre's feature set and it sounds to do some odd extra stuff. Is that done via detached modules, then?

I think every feature mentioned on Ogre's site should be available in the SDK right out-of-the-box. However there are some really nice plugins that expand Ogre's feature set; for example you can download improved terrain rendering engines with easy-to-use splatting capability, dynamic paging, procedural detail generation, and other advanced features. There are all kinds of add-ons that you can download and use with Ogre very quickly (like my PagedGeometry add-on, which is an advanced vegetation rendering system).

That is quite a good bit of marketing talk there, John :)
I'll have to play with it for a while so that doesn't go to waste...

:D Honestly, Ogre has very few disadvantages. Here's all I can think of:

- Ogre's material system is very nice except for per-entity material variation. For example, there's no way to set an entity's transparency individually unless you give it a material of it's own. In a way this is good since this can result in better performance due to reduced state changes, but personally I wish they would allow you to at least modify transparency per-entity.

- Although Ogre is very fast (much faster than many commercial graphics/game engines), it's not quite as fast as pure DirectX or OpenGL code, but unless you like me (an optimization freak ;) ), it shouldn't be an issue.

If Max3D would materialize, the world would be a better place for everyone (except the people who want to spend 2 years making there own engine).

If Max3D would materialize, the world would be a better place for everyone (except the people who want to spend 2 years making there own engine).

True, but I'd rather spend 2 years making my own engine than wait unknown years for Max3D to come out.

If Max3D would materialize, the world would be a better place for everyone (except the people who want to spend 2 years making there own engine).

Not for me, it wouldn't. The only way the world would be a better place for me would be if it materializing meant I didn't have to hear people moaning about Max3D, but as the realists among us ( FlameDuck? ) know it would just mean people complaining that Max3D is buggy, or that it hasn't had an update since forever ( eg: three weeks ) or that the documentation is non-existant or.. insert your own gripe of the day here.

you should take a look at Java Monkey Engine...cross platform and damn easy to pick up, and very very fast and feature rich..

I'd second Ogre, its fantastic, and if you just happen to be a 3dsmax user, things are even simpler. Completely WYSIWYG scene editing in a ogre rendered 3dsmax viewport.

It comes with a scene loader that basicly loads your scenes into a list that lets you to pick entities out of the scenemanager and manipulate them much as you would in 3dsmax.

The pro version also has a Ofusion serializer saving library that will autommaticly save your scenes intact should you use it in your app alongside the scene loader.

Currently messing with shaders using the media from B3D aerial antics, which you can see in the following screenshots. Early days yet and will look a lot better soon :) Currently using the same old low res b3d textures, with simple photoshop filter normal maps.

3dsmax with ogre viewport



FlowED Blitzmax application :)



Yep, unless something written in C that does not require me to write a wrapper for advanced programming stuff rolls along that is of equal quality, Ogre looks like a win.

Now I need a magical way to get it talking to BlitzMax, since all the released Ogre wrappers seem to have fallen off the Earth. (Extern functions and a lot of luck, I guess?). This is why MiniB3D is nice to use, but in this case I have been drawn to some fancy features that happen rather quickly here.

That 3DS max stuff sadly would not work for my project since levels for it amount to some guide meshes and a bunch of variables. The graphics engine alone would not know what to do with any of it; the game mixes together a small number of arbitrary assets using blending algorithms that will magically come to be one day, creating visuals around the guidelines set by the levels. I want a few basic properties to control every part of how an object interacts with the game, where every object is unique and can be controlled quite extensively, but is still based on some very basic properties. Trusting arbitrary assets created for each object to do that sort of thing takes up space and time, and is likely to not work since people would never go to such detail to manually craft a couple hundred unique objects like that. Look at any first person shooter, for example, and count the number of repeated textures, decals and sound effects! For extra points, count how many times the sound track loops. Arbitrary repetition of any one chunk of media (without any change to it) for a game encouraging exploration is rather ugly. (And no, I am not hyping alpha blending; I am thinking vectors, scripts and insanity!)
That rambly nonsense, of course, is precisely why I don't want a nosey graphics engine messing with it.

Your 3DS Max stuff does, however, look very cool... Good thing I don't own the program, or I would be changing my plan already :b

Also used Ogre once for a project due to the shadow support in there and was quite happy with it. It's only a bit large compared to something like Irrlicht which isn't as feature rich as Ogre.

It really depends on what parts you use with ogre. It doesn't have to be big. There are a lot of extras in the SDK that can be dropped. If you only want GL or D3D you can drop the other one by simply not including the DLL and commenting it our of your resource CFG. If you don't want shaders you can do the same by dropping CG.dll and just use fixed function, again with CEGUI GUI library and Newton or OIS input lib. Those are all addons that aren't required.

So barebones ogre with either D3D or GL is about 1.3mb of dll's compressed, not bad really.

If you want an unrestricted licence of Ogre with static linking instead of DLL's and the ability to port to other platforms, its just under $900 for an unlimited licence, that would bring it down further and might be handy for a full blown commercial project.