Jump to content
Enhex

Generic 3D Level Editor v0.2

Recommended Posts

Hi guys,

 

For the last several months I've been working on a generic level editor which I plan to use for future game projects.

It's inspired by Hammer(geometry creation) and Unity(GUI Layout) and designed to be even better in some aspects.

The two main goals are to make something that can be used for any game, and to have simple geometry tools to make user created content feasible.

Longer pitch available here.

 

Video: (feel free to skim it, it's making a level and playing it)

 

 

So I'm wondering what you guys think?

Maybe you could suggest things you always wanted to have or something? Workflow, features, etc.
For example I know of some cases which scripting can be useful to generate parts of the level (before it's saved so the generated stuff are part of the level file), which is something I haven't seen with the editors I got to use.

Share this post


Link to post
Share on other sites

Looks really good so far. For which engine are you creating a level for?

It's a generic editor which means it can be used for any engine or game. The only thing required is supporting the level file format, and providing config file for the editor.

The file format is a simple JSON (parsers available for any existing programming language) which contains shapes (static world geometry) and entities (the rest).

The config files tells the editor where to look for game assets which include materials, models, and entity config(s).

The entity config tells the editor about the properties of each entity so you can edit them inside the editor (things like lights, monsters, pickups, you know...).

 

I'm currently developing it and testing it with my own game engine, and later I'm considering to support popular engines such as Unity/UE. But again any engine can use it.

 

Heck, you can even use it for 2D games if you ignore one of the axes. It would be nice to see 2D games which have vector based worlds instead of grids.

Edited by Enhex

Share this post


Link to post
Share on other sites

I think this is a fantastic idea; and something Unity sorely needs. I found modeling simple rooms and shapes in Blender a chore, especially when it comes to texturing. Sometimes I don't want to unwrap, and it'd be nice if I could just apply textures to a face like in Hammer, and be able to stretch geometry without the texture stretching with it.

 

Rather than having a custom level file format, wouldn't it be better for the program to output a model in a few common formats? That way, you've got a truely generic and cross-engine level editor basically from the get-go with no implementation necessary.

 

Either that, or you keep the custom level file format, and have an export function that can save the level in one of a handful common model formats.

Share this post


Link to post
Share on other sites

I think this is a fantastic idea; and something Unity sorely needs. I found modeling simple rooms and shapes in Blender a chore, especially when it comes to texturing. Sometimes I don't want to unwrap, and it'd be nice if I could just apply textures to a face like in Hammer, and be able to stretch geometry without the texture stretching with it.

 

Rather than having a custom level file format, wouldn't it be better for the program to output a model in a few common formats? That way, you've got a truely generic and cross-engine level editor basically from the get-go with no implementation necessary.

 

Either that, or you keep the custom level file format, and have an export function that can save the level in one of a handful common model formats.

Yeah, I felt the same need for Hammer'ish editor when I checked out Unity, and I do plan to officially support Unity on a later version of the editor.

 

Regarding the file format, it is required to store the materials info for projection, though it's possible to build the shapes and save them in any format you want (after projection). Entities still needs to be stored somewhere and using model formats would mean a level will require multiple files, so it makes things a bit more complex.

I think the best option is to make a level loading library that can convert the shapes to common formats to be loaded by any engine. This way you still have 1 file and you don't have to implement shape loading for every engine.

Added to the todo list.

Edited by Enhex

Share this post


Link to post
Share on other sites

A generic editor is a tough pill to swallow when it comes time to start a serious project. First of all most public, non obscure, brush based editing tools are in a state of stagnation. The only generic brush based editor that arguably isn't in a state of stagnation would be Hammer. But even Hammer has some serious flaws when it comes to making life easier for next generation games.

 

The very first thing I would suggest before taking on a project like this would be to take a solid look at the next generation engines out there then think one step ahead of those. Specifically Crytek and UE4. Making another version of Hammer when Hammer itself is showing its age would be a mistake. If you want an example of taking that next step ahead of everyone else take a look at the Reflex editing tools. And if you want to really think ahead, take a good look at the implications that real time ray tracing will have on the development environment. Something like that will completely change the industry let alone our tools.

Edited by Castle

Share this post


Link to post
Share on other sites

A generic editor is a tough pill to swallow when it comes time to start a serious project. First of all most public, non obscure, brush based editing tools are in a state of stagnation. The only generic brush based editor that arguably isn't in a state of stagnation would be Hammer. But even Hammer has some serious flaws when it comes to making life easier for next generation games.

 

The very first thing I would suggest before taking on a project like this would be to take a solid look at the next generation engines out there then think one step ahead of those. Specifically Crytek and UE4. Making another version of Hammer when Hammer itself is showing its age would be a mistake. If you want an example of taking that next step ahead of everyone else take a look at the Reflex editing tools. And if you want to really think ahead, take a good look at the implications that real time ray tracing will have on the development environment. Something like that will completely change the industry let alone our tools.

I've watched this video about Reflex, tho it seems to be in too early stage to learn things from it. Right now it doesn't have GUI and it's just memorizing shortcuts and commands.

My goal with the editor is making user created levels feasible. That means that the editor needs to be intuitive, easy, and fast to learn. The Hammer/Radiant geometry creation is the best method for these requirements that I know of, fast and simple, and I'm also a big fan of 2D grids for fast and accurate positioning.

On the other hand at least Hammer's GUI design is really bad. You have to open windows for the most basic tasks like selecting a texture or editing properties, not to mention selecting a model. It also uses a lot of dropdown menus which are annoying to use. For the GUI design I'm learning from Unity, which does it right and doesn't have all these problems. I also have few planned features which I haven't seen in other editors, so it will have more to offer.

Also it doesn't use brushes, Its shapes are more similar to meshes, but like brushes allow storing the material info for projection. That means you can create concave shapes if you want to, which means one less thing for the level designer to worry about.

 

Regarding advancements in technology, well, I can't imagine anything better than polygons to work with, so I can't do anything about it.

 

To conclude the editor is designed around making modding feasible to the players, providing better UI & user experience, and making it available to be used for any game.

Edited by Enhex

Share this post


Link to post
Share on other sites

I've watched this video about Reflex, tho it seems to be in too early stage to learn things from it.

 

 

No, the fact that its a fully 3d interface with seamless play testing capability combined with a multiplayer workflow. You slap a few more features on to this bad boy combined with hierarchical instancing and it would easily surpass both Hammer and CODRadiant.

 

There is everything to be learned from this, its a paradigm shift in terms of workflow that could have huge implications on game development down the line. The fact that its early should be seen as a chance for you to beat them to the punch rather than view it as an incomplete concept. Which it is definitely not.

 

If there is one thing I can say about people making new editing tools right now, it would be that everyone is too busy thinking within the box.

Share this post


Link to post
Share on other sites

No, the fact that its a fully 3d interface with seamless play testing capability combined with a multiplayer workflow.

 

A 3D interface could be nice, tho it isn't too different from the 2D grids. It is very useful for an in-game editor in which you don't have a cursor to use grids with, or screen space for them (tho it's possible).

 

With a generic editor the game itself is outside of the scope - it's not an in-game editor. BUT a game can support live reloading of a level file, so it can be a game-level feature.

 

My initial thoughts about multi-user editing is that it's gimmicky and that users will anyway want to work on different areas to avoid stepping on each other's toes. Though using hierarchical instancing with real-time updating and letting each level designer have his own sub-section instance to work on you can achieve similar result in which multiple users can work on the same level at the same time.

Though the problem with it will be accessing objects from different sub-sections, which will be really limiting, and to solve that you'll need all the users to be working on the same file, like the original suggestion.

 

When it comes to new editing tools, I'm trying to think about problems to solve. One problem is repetitive tasks, having to repeat the same action many times. For example making a spiral staircase or a curve in a surf map - they require relative position and rotation to the last element. In that case a script can be used to do the repetitive tasks. e.g. take object X, clone it, move and rotate the clone by Y, repeat Z times. You can save the script and use it on any object. You can use it to make much more complex things and save a lot of time.

To come up with new tools we need new problems. Problems that start with "why can't I just..." and don't involve mind reading can be good.

Edited by Enhex

Share this post


Link to post
Share on other sites

Really cool you started this.

 

What language you program in? It would be nice if you make it public on github so other people can contribute.

 

==========

Requests:

What I would like is a scripting editor. Can be really basic. Let's say I want to make condo I could map the first floor and then do something like this:

 

pseudo:

 

n = 20;

target = selection();

h = target.getHeight();

 

for (i = 0; i < n; i++) {

  target.copy(target.x, target.y, target.z+(h*i));

}

 

==========

 

Clone objects, I could make a pilar, clone it. And then later edit to original so it affects all clones.

 

=========

 

Source control friendly, make it so I can push my level changes to github. (maybe it's already possible).

 

=========

 

keep it up!

Share this post


Link to post
Share on other sites

No, the fact that its a fully 3d interface with seamless play testing capability combined with a multiplayer workflow. You slap a few more features on to this bad boy combined with hierarchical instancing and it would easily surpass both Hammer and CODRadiant.

I think there's no silver bullet when it comes to brush building. I always desired a fully 3D editor before they were available, yet every time I look at some demos they don't seem to be that quick! I think best thing is to be able to do both. Especially I always return to imagine of my time in high school with AutoCAD, and have some of those priciples in an editor. For eg. I'd like to layout a planimetry only in top-dopwn and then just say "extrude [wall height]" (if you know what you are going for i think that's super quick, less distracting, more productive).

I would like to have some principles from HTML entities, be able to define bulding blocks and change the wall height for all the walls on a floor with two clicks and a console command.

Dunno if it makes sense.

Edit: I see it's kinda the same idea of Clankiller above me!

Edited by blackdog

Share this post


Link to post
Share on other sites
 

Requests

1. Yeah that's pretty much the idea with the scripting. (Tho your example can be done more easily with "shift-copy")

 

2. That's a prefab system, I have it planned.

 

3. The levels are saved in text format, so you can use it with git / mercurial to save the delta changes.

 

 

I would like to have some principles from HTML entities, be able to define bulding blocks and change the wall height for all the walls on a floor with two clicks and a console command.

Yeah you could build such hierarchy using hierarchical prefab system.

Edited by Enhex

Share this post


Link to post
Share on other sites

Btw, I'm pretty sure you won't do it but why don't you hook up with Lajron?

 

 

You guys are sort or working on the same thing. And I think combining talent could push the quality further then you would be able to do on your own.

 

Just a silly idea :)

 

O yeah, one more,

 

1) please have auto-save incase of crashes.

 

2) And another idea (i'm getting on fire :) ), being able to search for identical objects. Let's say I created a door out of a brush. It's x by x by x units and has texture x on surface x etc.

I would select the object, go to tools > find similar objects. It could create a list like entity report where you can go to each of them. For the search, it should consider rotations in 90 degrees*, for the rest everything should match (that is the dimensions and how it's textured).

 

This could be a huge timesaver and would be nice if you forgot to create a instance/clones of something.

 

3) There is the Cordon Usage in hammer which I didn't use very often. Those things:

Mo-editcordon.pngMo-togglecordon.png

https://developer.valvesoftware.com/wiki/Hammer_Cordon_Usage

 

It would be nice if they can be used for more then they do now. First, let me call it Region Of Interest (ROI) since that name sounds better if it get's multiple purposes in the future.

If you use the search idea I described at 2 for example. Then It would only search in the ROI. I could also imagine a duplicate going in a direction until it's exceeding the ROI. Or the entity report only in the ROI. I could imagine more useful use for this.

 

Also for the Cordon, there should be a option to make it behave like a skybox when compiling. I really disliked the times I used Cordon that it made a black box.

If there is a light source outside the Cordon that is set to "is sky" then it should also use that light source.

----

I have more ideas but I will throw them in small parts :)

The best one is still to come but I need a few hours/days to prepare that.

 

O yeah, would be cool if you have a google docs where we can see your todo list and idea.

 

* the 90 degrees thing should not be an option but always be on, to many options doesn't make a program better.

Share this post


Link to post
Share on other sites

Btw, I'm pretty sure you won't do it but why don't you hook up with Lajron?

Well Sledge Editor is an editor for the Source engine, thus it's using Valve's technology and it isn't generic. Under the hood the editors work differently.

 

Regarding your ideas:

 

1. Sure thing, that's a pretty standard feature. Tho I don't plan on having crashes.

 

2. That sounds like a problem that can be solved with prefabs.

 

3. Well that's a feature that is used to save on compile time when you want to test a sub-set of the level. The editor is generic thus things like compiling and skybox implementations are at the game-level, so the problems you mentioned aren't part of the editor. Adding such feature is possible and isn't hard but it's not a priority for me for now.

 

I do have a roadmap here with milestones and features.

Share this post


Link to post
Share on other sites

so I have been inspired to do a conglomeration of all of my thoughts on this topic as one of my episode of my Engine Wars series. It talks about Why Reflex is a big deal and also dismisses the general criticisms I often hear about multiplayer editing tools. On that note keep in mind that my points made on the topic are not directly aimed at anyone in specific as I have had similar discussions with various different people over the years. This is something that goes all the way back to the late 90s when the only forum I frequented was Quake 3 world. So my tone on this topic has had plenty of time to sour lol.

 

http://youtu.be/QKUvz3HRshU?list=PLZmVk4US70ojwXSdR442EWnD9xSFD1Y8q

 

With that said, I am strongly considering the idea of doing reviews of new tool sets that people are making as I have been seeing more than a few lately.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...