Hi all!
I’ve very recently been looking around for a suitable 3d rendering /game engine in Java, and after dayss of looking and glad to have finally found one which looks very promising, and is still under development
Anyway, I know I’m sure to sound very intrusive, but I’m not…honestly I simply want to get involved with the project in a positive way, take this as constructive criticism and suggestions!
While looking through the code I noticed that almost none of it is documented, or commented actually. I was wondering what your stance on this issue as, as I believe it lets down the project. I would be happy to lend a helping hand in this situation by documenting various sections of the code, atough due to my lack of knowledge of the structure of some of the code I obvisouly can’t do it all.
I also had thoughts about the management of things such as particle systems and materials / textures etc. On my quest for an engine I came acorss OGRE (www.ogre3d.org) which is very well designed IMO. I couldn’t use this because I do not want to develop in c++, and it’s a nightmare to setup unless you shell out for MS Visual C++ or equivalent.
Anyway the idea is to centralise the management (singletons) and also to externalise them by creating a parseable format which can describe the features of such an entity (ie it can describe what parameters are to be applied to a particle system). This allows for an extensible and easy to use format, meaning that a game engine can be continually changed and modified without access to the source code (ie. modding, or simply trying out various changes to a particles system for example). Take for example a material, which may be applied to multiple objects:
//material definition
material Grass {
//'global' values for the material
ambient 0.2, 0.7, 0.32
//describes LOD, which sets up three different materials at different
//distances
LOD 200, 500, 700
LOD 1 {
pass {
diffuse 0.5, 0.1, 1
// Texture unit 0
texture_unit
{
texture grass-base.jpg
scroll_anim 0.1 0.0
}
// Texture unit 1 (multitexture pass)
texture_unit
{
texture grass-detailed.png
rotate_anim 0.25
colour_op add
}
}
pass {
//another pass to add even higher level of detail to material,
//could be turned off depending on capabilities of end machine
}
}
LOD 2 {
etc.....
}
}
BTW that above example was off of the top of my head, although loosely based on what is seen in OGRE. All values are random so don't take any notice of the details ;)
This sort of management will require refactoring of major parts of the engine, as well as a big effort to actually create. I am willing to help in any way I can, but again I do not claim to be highly knowledgeable about 3d concepts (advanced ones anyway) nor the engine (currently). I can create easy to understand and competent Java code though :)
The advantage to this system is IMO extensibility as the major 'selling point'. It also means that advaced setups can be used for creating highly detailed materials for terrain and other object that can be setup to be renderable on not only high end systems but low end systems, through additional definitions of different material setups (ie in the example above the material is split into LOD sections, which could potentially be further divided into high end and low end, used depending on graphics cards capabilities and such)
Sorry for such as long post, I've got too much time on my hands. If you are interested in anything discussed here please tell me, I am willing to help in anyway I can for this project, to improve it into something that is useful and widely used.
Thanks for listening, and hopefully I'll be having further discussions with you!