What engine/library shoud I use for 3D game development?

Ok, I know this might be the wrong board, if so I’m sorry. This one seems to fit my question.

Here is the deal… Its been a long time now that I’m developing java stuff. Things from 2d games, processing frameworks and even some 2D library (small engines). And now I’d like to start making 3D games but the thing is, I can’t seem to find a place to start it right.

I have a good experience in high-level 3D game programming, I used to be a addon/gamemode developer in Garrysmod. Its more like modding, but still is almost the same process as using an big engine (the LUA code that is use to script gamemodes is quite similar to UDK4 c++ in structure).

The main problem that I find in all the avaliable options is that if I want more starting content to focus my work on the game it self, I need to use a messy C++ engine way bigger than what I actually need… But if I go the other way, as I’m trying to, I need to code loads of ‘basic’ things.

I tried using UDK4 but the C++ documentation and support is quite terrible. The syntax UDK requires is messy and quite ugly and intellisense makes my skin crawl. Unity is too expensive to go commercial and too big, and some of my friends that work with it say it is too problematic. Than I started coding stuff in libgdx (which I used before to make 2D games and things) but the 3D API is too little. I mean, most of the things I need are there, but binding it all together is now looking too much effort.

The problems I’m facing with libgdx as my library are fighting with bullet (the default kinematic character controler seems problematic). Also, the default uber shader is vertex lit only and since it needs compatibility with many devices, doesn’t offer much. I’m using the test version uber-shader that is pixel lit, but still doesn’t seem to be working. I’m sorry about all this mumbling (all developers mumble, cmon), but I’d like to know if the effort of learning shader code, fighting bullet, and coding tons of things that already exist in other engines worth. I mean, shouldn’t I be focusing more on the game code it self?

What you guys think? What engines you guys use? I’d like to hear some of your histories when ou, if you faced the same thing. Thanks for surviving all the mumbling until here.

And I mean, I did my homework. I know most of the alternatives and what similar questions landed on this forum. Still, I’m more focused on your histories and how you handled this question than on finding a good engine. Your opinions on the stuff you worked with.

Lets also raise some questions:

http://www.jpct.net/ - this one have enought support? I heard very little about it.

http://jmonkeyengine.org/ - When I used it, it seemed good but some how felt very messy. It has a big community but the showcase only has few and buggy examples. I might be terribly wrong about it but many advised me against it before. (This also http://www.java-gaming.org/topics/why-don-t-many-of-you-use-jmonkey-engine/29474/msg/270626/view.html#msg270626)

https://www.unrealengine.com/blog/welcome-to-unreal-engine-4 - I’d like to stick to java and enjoy good clean code… but this one has tons of features. Not so expensive (I already have the editor) and can get commercial very easily. The code though will require much time reading infinite documentation since there is no propper getting started and the documentations is quite problematic.

http://polycode.org/ - Not java too, but has a LUA binding and I must say I love lua. Seems quite powerful but is still in development and has no binary releases (I’d need to build it every time).

Ardor3D just stopped beeing developed. (http://blog.renanse.com/)

I dunno if my input is pertinent, as I stick to 2D and don’t have any published works to show. But here’s what I did/do:

I started out by looking at libraries like slick2d. However, I found that if I wrote the classes myself and didn’t use libraries, I had a code structure that I could follow, and I knew what was happening “under the hood” (to a small extent). This gradually evolved and I tinkered away for many months. Now I have a functioning library that has UI components, can parse UIs from javascript/xml, uses VAOs for everything, and I can add stuff as needed. Generally, I like to try and figure things out myself. If I can, I do it myself. If I can’t, then I look for a library or sample code that has strictly what I’m looking for and learn how to use it or apply it. I am aware that 3D is infinitely more complex, but I haven’t gotten that far in my experience :slight_smile:

My advice: If this is for learning / fun, then try to do as much of it using homegrown libraries and build/learn from there and add as needed. If this is for commerical development, then use a library like LibGDX and try to find libraries that have the code that you need to progress quickly.

Just my spiel,
CopyableCougar4

I do that for all my work. I try to code what I can do by hand and use a few libraries on the way. I wrote 3 2D ““engines”” before I started using one.

The deal breaker is that the jump from 2D to 3D is quite big. I want to be able to start projects now, for fun, but keep developing them up to commercial state. Sticking to the same technology is something I find very important.

All this ramble involving commercial is because I’m almost finishing my computer science graduation and I’d like to have something to work on, a project of mine, before it is ended. I have so many ideas and gamemodes that I wrote that could be turned into nice games, I just lack the right technology to stick to. I love source engine and the LUA API in garrysmod is amazing, but I cannot live coding there, it is too confortable and wont give me a dimme.

My gaming path went from Java2D (Swing) -> lwjgl. I ran into performance problems with Swing once I started rendering > 10k sprites per frame and Swing/AWT doesn’t mix well with OpenGL. Going to the bare metal (lwjgl) has given me all the power and flexibility that I need.

However you do have to implement everything from scratch. In my case this meant creating a UI library, handling the input events, writing a signed-distance field shader, rolling my own collision detection using an octree, etc. Overall a lot of work but I get exactly what I want.

Perhaps a balance can be struck. Can you use libgdx but write your own shaders? I wouldn’t know as I haven’t used that library but it looks like it provides a lot of useful things.

Jmonkey was pretty nice when I tried it. If you want Java + 3d I doubt you will find anything better. The documentation is pretty awesome as well. I don’t think that people don’t use it because the engine itself is bad. It could also be because of the popular myth that java is slow for 3d games.

Hi

It’s proprietary but EgonOlsen would be very happy to help you.

You already read what I wrote about this engine :slight_smile:

JogAmp’s Ardor3D Continuation is alive, a huge tutorial is being written, you can see that the project is still active:
https://github.com/gouessej/Ardor3D
http://jogamp.org/wiki/index.php/Ardor3D_Overview

[quote]a subset of Ardor3D is still actively maintained by Julien Gouesse
[/quote]
I’m responsible for engine support in the JogAmp community and I won’t abandon this engine as I use it for my own projects and several developers migrated from Java 3D to JogAmp’s Ardor3D Continuation. I assume that I don’t need to repeat what I wrote several months ago. I already suggested to JMonkeyEngine developers to merge their engine with JogAmp’s Ardor3D Continuation but they don’t seem to be interested whereas it would reduce effort duplication. I admit that JMonkeyEngine is still a lot more complete than JogAmp’s Ardor3D Continuation. There are at least 3 open source games (well commented and documented) based on the latter including a kind of Minecraft clone with fewer features. It’s up to you, it depends on your needs, I can’t tell you which one you should use.

About a year ago i was playing arround with libgdx for the first time. As you allready used it for 2D games you know, that it is pretty easy to use and pretty powerfull.
After a few tryes with the 2D Api i tryed the 3D Api, just to get a feeling about how difficult 3D actually is.
I was pretty proud, when i got the basics done (actually it didn’t even take much time), but soon i faced some issues:

  • I use to rush into coding, as i want to see some progress to keep myself motivated. This usually results in verry dirty and unreadable code.
  • I ran into performance issues pretty soon, as i was using a 5 years old notebook with a bad graphics card (ATI Radeon HD 3430 Mobility) and i just did not have enough experience to optimize the rendering etc.
  • I don’t have experience with Blender or other 3D Modeling applications and i don’t have the patience to learn it. The result is a game full of moving boxes, which can’t keep my motivation up :stuck_out_tongue:

Therefore i stoped the project, as i was just not ready for 3D yet, but the “experiment” showed me, that libgdxs 3D engine is pretty powerfull and even easy to use, as an unexperienced developer was able to create a working first-person-camera which is sticked to the character and controlled with keyboard + mouse (actually the character was controlled by keyboard + mouse and the camera was controlled by the character, which gave me the posibility to add the camera to an enemie, not controlled by keyboard+mouse but thats another story :P).

But, as you are looking for an engine, which does almost all dthe 3D stuff for you, libgdx won’t be what you are looking for. It is more like a framework, which gives a lot of support for different things, but you still have to deal with the 3D things. But i guess thats the same in many other engines, and i guess, that if you want to programm a 3D game you should deal with the 3D basics first. This helps you to get some understanding on how the things work and will help you with some future problems you will face.
I suggest to take a look at Xoppas tutorials on the Libgdx 3D Api (Xoppa is the developer, whic hcreated the 3D api) to have an idea of the power of the api.

I got all you have, Springrbua. I have a running example with jbullet, a custom shader, some ray picking experiments and other things. The deal breaker is that I’ll have to code a map format that supports jbullet, static models, uv mapping (with custom settings for texture correction)… I’ll also have to code networking and a map editor. There are more things that I’ll have to tackle, but the ones listed are difficult enough.

Also I don’t rush coding, I follow a standart with complete java-doc and using design patterns where I can, and at least calling out possible optimizations in the comments. This makes things slow, and as you said dealing with this 3D basics in a slow pace, makes you feel unconfortable and sad.

gouessej, awesome comment. I’ll certainly have a look at JogAmp’s Ardor3D! I’ll come back here also to tell my experiences with it and contribute where I can.

Seems like you got a lot more then me :stuck_out_tongue:
Well the map format depends on the game itself, so i guess you won’t get much support for that or only for some “default map formats” (like for example Tiled in 2D).
The networking, in my opinion, does not belong to the 3D Engine itself, it is an other, idependend engine. Libgdx does support some kind of networking, but i guess it would be better to use another networking library (you could take a look at KryoNet).
The map editor again depends on the game itself and ofc on the map format you are using. So again i guess you won’t find much support for that, except you decide to use some "“default map format” (again for example something like Tiled for 3D, if there is anything).

I suggest you to think about your game itself and maybe you get an idea of how to save/load the map and the objects on it. The level-editor can then be created with that map-format in mind.
Even if you find some support for 3D map saving/loading out there, i guess it can be used with libgdx.

Its good, that you don’t rush into coding. I actually also started a project (2D) which i am thinking about since a few month. And as i tought about it for a pretty long time i got an idea of how to organize code and i so i don’t rush to much. The code looks a lot cleaner as usual :smiley:

Nice man!
I have a libgdx expansion that I coded. Its a entity manager that handles networking for some cases. It is based on valve’s article https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking and the API is very simple.

I used kryonet to do that. And some other things. It handles box2d synchronization too, making it quite easy to write multiplayer games. The deal breaker is that I’m fighting some issues with the amount of data you can pass between server and client. Also box2d doesn’t like setPosition methods… But soon enought I’ll release it.

Though networking is not part of 3D engines, is usually associated with them as they grow larger since most of modern games have some networking.

Anyway, thanks for the support.

I took a look at ardor3D but I can’t seem to find good documentation… JMonkey seems like a good option too. I’ll explore both.

I use a separate sound library. There is neither audio, nor network nor physics build-in support in JogAmp’s Ardor3D Continuation. If you really look for something more complete, look at JMonkeyEngine and anyway, it would be better for you to start using JogAmp’s Ardor3D Continuation only when my tutorial is ready because some important things have changed since Renanse stopped the project (removal of 2 backends, Gradle support, full AWT free image loading, …) and this engine wasn’t very well documented. LibGDX is a middle level API, it helps you to build your own 3D engine, it is less high level and more flexible than JMonkeyEngine and JogAmp’s Ardor3D Continuation. However, there are mainly 3D engines with a few other services but there aren’t specialized game engines.

It was one of its main drawbacks and the documentation is a bit obsolete now.

That networking thing sounds interesting, sounds like the client calculates the physics and the server only forwards them, am i right?
If the server calculates the physics instead, the client doesn’t even need box2d, so setPosition won’t be a problem. But then the movement prediction will be a bit more difficult.
Everything has some drawbacks :smiley:

Back to Topic: I guess trying the engines out is the best to find he right one for you. If the 3D engne you like the most does not support other things you need you can simply find a library that offers you some support for that (for example a networking library, sound library etc.)

About the networking, I use box2D both on client and server. This makes everything run more smoothly for the client. I interpolate the position from the server to the local position. Server having total priority of course.

I’ll work on jmonkey for now… but I’m very interested in this new ardor. I’m quite a fan of using libraries more than editors. I can handle the things missing with libraries of my own, or libs around the web. Just that tutorial and docs I think its essential.

You sure can.