|
A wild engine appears!
#436057
01/18/14 01:12
01/18/14 01:12
|
Joined: Nov 2007
Posts: 2,568 Germany, BW, Stuttgart
MasterQ32
OP
Expert
|
OP
Expert
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
|
Hello fellow game engine trainer! I have to announce a new open source game engine on the market. OpenWorld.EngineOh man, another engine again? Yep and this time it's super effective! I have done some research into game engines but i coulnd't find an engine that fits my needs. But what about......Acknex? Way too limited to create something quickly and portable. ...Unity3D? Why do you even ask? ...JMonkey? Nope, it's Java. ...UDK? Can i has money? ...CryEngine3? Can i has even more money? ...Rayne? I'm sorry, but i wanted a managed environment with reflection. Why should i look at it?Okay, so you want to know what is so special about this engine? This engine supports both high and low level coding. It features node based scene management, a GUI framework, custom post processing pipelines, physics, sound, an asset pipeline and other stuff you may want to use. But it also allows you to code your own rendering with OpenGL 3.3. Every method is documented and the API has a clear design. For a complete list of features, click here: FeaturesAlso, the engine is theoretically multi-platform but i haven't tested it yet. What techniques are you using?The engine is written in C# based on .NET 4.0. The renderer is based on OpenGL 3.3, the physics engine is Jitter (a full managed phyiscs engine), sound is provided by OpenAL. Why have you done this?My current game project is a game like GarrysMod. Fully scriptable, multiplayer and user created content. I was searching for an engine that could allow me to create those features easily. But Acknex was too limited in case of asset loading, in Unity3D you can't create a good only-source game, other engines are badly documented or are just outdated. So i've done this engine. The basic API is oriented on the XNA API design because my first version of the game was written with XNA and i kinda wrote the engine so the game compiles with little changes. Why is there no binary download?This engine is in an early stage. A lot of features are missing, others could be refactored and your code will be broken. So a compiled binary will be released as soon as we have some stable and tested release. Can i participate?Sure, just contact me via E-Mail (felix [at] masterq32.de) or via PN. You should have collected some experience with game programming and C#. Any questions still open?Just ask here in the thread! Okay, i hope i haven't forgotten something. Have fun destroying my dream of a success release of my engine. Felix
Last edited by MasterQ32; 01/20/14 18:04. Reason: Added features
|
|
|
Re: A wild engine appears!
[Re: sivan]
#436125
01/20/14 13:57
01/20/14 13:57
|
Joined: Nov 2007
Posts: 2,568 Germany, BW, Stuttgart
MasterQ32
OP
Expert
|
OP
Expert
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
|
Okay, i'll do some feature list this evening (i don't know it either ) The engine is in development since 30.12.2013 so not that old....
|
|
|
Re: A wild engine appears!
[Re: MasterQ32]
#436137
01/20/14 15:56
01/20/14 15:56
|
Joined: Apr 2007
Posts: 3,751 Canada
WretchedSid
Expert
|
Expert
Joined: Apr 2007
Posts: 3,751
Canada
|
...Rayne? I'm sorry, but i wanted a managed environment with reflection. So, kind of like this?
void Foobar()
{
RN::MetaClass *meta = RN::Catalogue::GetSharedInstance()->GetClassWithName("RN::Entity");
RN::Object *object = meta->Construct();
if(object->IsKindOfClass(RN::Array::MetaClass()))
{
throw "If you run into this, hide in your basement and good luck survivng the apocalypse";
}
object->SetValueForKey(RN::Model::WithFile("myModel"), RNCSTR("model"));
}
I mean, it's an useless example that I just pulled out of my ass, but it's used for serialization/deserialization and runtime generics... But I digress, just wanted to say that Rayne DOES have a runtime type introspection system.... No managed environment though, unless you drop to a scripting language that supports it. Anyways, good luck with your engine!
Shitlord by trade and passion. Graphics programmer at Laminar Research. I write blog posts at feresignum.com
|
|
|
Re: A wild engine appears!
[Re: MasterQ32]
#436147
01/20/14 18:06
01/20/14 18:06
|
Joined: Apr 2007
Posts: 3,751 Canada
WretchedSid
Expert
|
Expert
Joined: Apr 2007
Posts: 3,751
Canada
|
Damn! But the reflection is only for Rayne objects, right? Yes, and only for subclasses of RN::Object. Which is the main class for everything high level, but for example RN::Matrix or RN::Vector2/3/4 and similar don't subclass from it to remain trivially copyable. It tries to capture the best of both worlds, having handy high level objects, but not imposing the overhead for every object there is. And it allows us to not having to rely on any custom pre-processor. Anyways, I looked into the Demo subfolder, and what I'm missing a bit is high level abstractions. For example in the asset demo, why do you have to rotate the object through its shader?! And why is setting up OpenGL state necessary, can't the renderer do that? Dunno, at least that's how it seems, I might be wrong since I really just took a short look. On the plus side, the naming is consistent from what I can tell, and no bullshit abbreviations that no one gets and for which you have to consult the documentation every fricking time.
Shitlord by trade and passion. Graphics programmer at Laminar Research. I write blog posts at feresignum.com
|
|
|
Re: A wild engine appears!
[Re: WretchedSid]
#436149
01/20/14 18:14
01/20/14 18:14
|
Joined: Nov 2007
Posts: 2,568 Germany, BW, Stuttgart
MasterQ32
OP
Expert
|
OP
Expert
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
|
Anyways, I looked into the Demo subfolder, and what I'm missing a bit is high level abstractions. For example in the asset demo, why do you have to rotate the object through its shader?! And why is setting up OpenGL state necessary, can't the renderer do that? Dunno, at least that's how it seems, I might be wrong since I really just took a short look.
On the plus side, the naming is consistent from what I can tell, and no bullshit abbreviations that no one gets and for which you have to consult the documentation every fricking time. Oh thanks! I definitly need to rewrite the asset demo! If you take a look at SceneManagementDemo.cs you can see that you don't need to write a custom rendering like i did in the asset demo. But the thing with the render states is true, i should take some time to clear this into a better abstraction. Maybe i need to adjust my renderer so you can decide what things will be cleared before rendering... And also thanks for the naming and stuff. I'm working after the microsoft coding guidelines and complete rulessets (those will be applied every two to four weeks) so the code stays clean, consistent and intuitive to read.
|
|
|
Re: A wild engine appears!
[Re: baoxiaotian]
#437107
02/09/14 12:00
02/09/14 12:00
|
Joined: Nov 2007
Posts: 2,568 Germany, BW, Stuttgart
MasterQ32
OP
Expert
|
OP
Expert
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
|
Damn spam bots... Just some updates: I'm having exams time right now so not that much time to work on the engine... But here is a screenshot: The screenshot features the deferred renderer, a character controller and physics. You can push the box around with the character and the red light is rotating around the char, so you can see different lighting effects. Code for creating the walkable, physics player:
SceneNode player = new SceneNode();
player.Transform.LocalPosition = new Vector3(0, 3, 0);
player.Components.Add<CharacterController>();
player.Components.Add<Renderer>().Model = Game.Assets.Load<Model>("models/character");
player.Components.Add<PlayerInput>();
player.Parent = this.scene.Root;
SceneNode swirl = new SceneNode();
swirl.Transform.LocalPosition = new Vector3(2, 0, 0);
swirl.Components.Add<Scriptable>().Script =
@"function update(self, time)
self.Node.Transform:Rotate(0, 60 * time.DeltaTime, 5 * time.DeltaTime)
end";
swirl.Parent = player;
SceneNode light = new SceneNode();
light.Components.Add<PointLight>().Color = Color.Red;
light.Parent = swirl;
For those who never worked outside Gametudio: SceneNode is some kind of "ENTITY" that allows you to create objects in your scene. The nodes build up a scene hierarchy so every child object moves relative to its parent. Also every SceneNode has an arbitrary number of components. A component defines a behaviour or information for the scene node like a Gamestudio "action". The main difference is that an action is started and then runs until it dies. Components can be enabled or disabled, also expose variables you can change at runtime. So you start the light component and then you can just get the light from the SceneNode and modify its color. There are some premade components already like RigidBody for physics and different shapes for their appearance. Unlike gamestudio you can define your physics shape pretty good and the shape is not depending on the model you use. Next there is the Renderer component. It does what its name says: It renders something. Well, not exactly, but you can see the effects. The Renderer component adds a 3D model to the render list with the transformation (position, rotation) of the scene node. Then the SceneRenderer draws the whole scene. This approach allows you to create a custom scene rendering without changing anything on the scene logic itself. So changing from a simple texture rendering without lighting to a complex tiled forward renderer is possible. You don't even have to change a line of code in your whole scene, you just need to switch the renderer. Regards Felix PS.: The engine now uses a multithreaded approach. It renders now while updating the physics. PPS.: Ask me questions!
Last edited by MasterQ32; 02/09/14 12:01. Reason: Code formatting.
|
|
|
|