Pondering making a new format/editor
Posted: Wed Sep 25, 2013 4:47 pm
This is something I've wanted to do for a while, but it's probably not realistic with my limited free time, so I figured I'd just throw some ideas I had out there.
Minimal, intuitive, powerful controls:
Not sure if I'd make it 3D-only, since having the 2D windows can be useful/easier sometimes, but I'm picturing an interface similar to Wings3D. (example: http://www.youtube.com/watch?v=jqnDYU4JxNA)
Closed mesh based editing:
Instead of forcing convex brushes during the editing phase, users can build more complex, concave objects, so long as the mesh is sealed. They will be intelligently broken into convex brushes at compile time.
3D grid planes with snaping:
One of the biggest problems I have with most 3D editing windows is that there's not a good way to use the grid for things like vertex tweaking. I want to implement a system where a grid plane will be visible on the axis most perpendicular to the camera (ex: camera looking down would show the ground grid plane). Moving/editing objects would edit them along this plane and allow you to snap to the grid.
Auto-texture selection:
If you want to make a map with lots of grass and rock textures, for example, you could set up an object to auto-select grass textures on faces with walkable angles/normals and rock for steep angles.
Mirrored map mode:
For things like CTF maps, sometimes you want to have the geometry be perfectly symetrical, and it's a pain to maintain both sides of the map when making tweaks. Mirrored mode would make the changes to both sides of the map simultaneously.
Smart auto-alignment of certain textures (configurable?):
Things like wood textures should almost always be aligned along the length of boards. This means half the time, you have to rotate a bunch of textures 90 degrees if they're on-axis, and you have to find a good angle for brushes made at arbitrary angles. Per-texture auto-alignment features would attempt to automatically handle this for you. Another example is crates. If you scale/rotate/offset them, they should scale to the closest multiple of 64 (or whatever your crate size is).
Prefab sub-editing system:
This would basically allow you to edit groups brushes separately from the rest of the world, then place them anywhere. For example, say you wanted to place a house at a non-axis aligned angle. Trying to get all the brushes and textures to line up well is a real pain. If you could edit the house on-axis by itself, then drop the whole group of brushes anywhere in the map, at any angle, it would make things a lot easier.
In-editor compilation:
I'm thinking of a random ray tracing system for calculating reflected light, or possibly rendering the scene from each lightmap point. The more iterations you do, the better it will look. If this is continuously run while the editor is open,
A) You'd get in-editor previews for lighting.
B) You won't have to wait for the compilation to finish before launching the map. Just save and run.
It would also let you see how your faces are getting split up and other things that are useful to optimize your map.
Things that would require a new map format:
LOD system:
This would probably be a challenge to implement, but I was picturing something that could better support larger, open maps. Rocks and terrain could allow you to edit in different LOD levels. You could build the basic rock, switch to higher detail mode, then split some of the faces to add more detail.
Reflection PVS:
Reflective surfaces are problematic if they can see around corners that are blocked by PVS. Reflective PVS would determine which areas are visible to a player
Caustic maps:
Kind of a minor thing that I think would be cool. Currently, in my engine, caustics are applied to everything underwater, but it would be cool to have them applied based on light angle, reflected onto nearby surfaces, etc.
This is all very ambitious, and I'll probably never get around to it, but it would be cool. I'm trying to decide what approach I should take if I go forward with it.
I was thinking of using this as an opportunity to learn something like C#, where the UI would be much easier to implement. I'm not sure if that's the kind of UI I want, though. If I do something like Wings3D, I will likely have to do highly specialized context menus. Radial menus would probably be the fastest user interface (ex: right+click, mouse right, mouse up might create a new cube -- easier muscle memory than trudging through drop-downs looking for the item you want). If I do something like that, I'd probably be better off writing a custom UI system in OpenGL.
Minimal, intuitive, powerful controls:
Not sure if I'd make it 3D-only, since having the 2D windows can be useful/easier sometimes, but I'm picturing an interface similar to Wings3D. (example: http://www.youtube.com/watch?v=jqnDYU4JxNA)
Closed mesh based editing:
Instead of forcing convex brushes during the editing phase, users can build more complex, concave objects, so long as the mesh is sealed. They will be intelligently broken into convex brushes at compile time.
3D grid planes with snaping:
One of the biggest problems I have with most 3D editing windows is that there's not a good way to use the grid for things like vertex tweaking. I want to implement a system where a grid plane will be visible on the axis most perpendicular to the camera (ex: camera looking down would show the ground grid plane). Moving/editing objects would edit them along this plane and allow you to snap to the grid.
Auto-texture selection:
If you want to make a map with lots of grass and rock textures, for example, you could set up an object to auto-select grass textures on faces with walkable angles/normals and rock for steep angles.
Mirrored map mode:
For things like CTF maps, sometimes you want to have the geometry be perfectly symetrical, and it's a pain to maintain both sides of the map when making tweaks. Mirrored mode would make the changes to both sides of the map simultaneously.
Smart auto-alignment of certain textures (configurable?):
Things like wood textures should almost always be aligned along the length of boards. This means half the time, you have to rotate a bunch of textures 90 degrees if they're on-axis, and you have to find a good angle for brushes made at arbitrary angles. Per-texture auto-alignment features would attempt to automatically handle this for you. Another example is crates. If you scale/rotate/offset them, they should scale to the closest multiple of 64 (or whatever your crate size is).
Prefab sub-editing system:
This would basically allow you to edit groups brushes separately from the rest of the world, then place them anywhere. For example, say you wanted to place a house at a non-axis aligned angle. Trying to get all the brushes and textures to line up well is a real pain. If you could edit the house on-axis by itself, then drop the whole group of brushes anywhere in the map, at any angle, it would make things a lot easier.
In-editor compilation:
I'm thinking of a random ray tracing system for calculating reflected light, or possibly rendering the scene from each lightmap point. The more iterations you do, the better it will look. If this is continuously run while the editor is open,
A) You'd get in-editor previews for lighting.
B) You won't have to wait for the compilation to finish before launching the map. Just save and run.
It would also let you see how your faces are getting split up and other things that are useful to optimize your map.
Things that would require a new map format:
LOD system:
This would probably be a challenge to implement, but I was picturing something that could better support larger, open maps. Rocks and terrain could allow you to edit in different LOD levels. You could build the basic rock, switch to higher detail mode, then split some of the faces to add more detail.
Reflection PVS:
Reflective surfaces are problematic if they can see around corners that are blocked by PVS. Reflective PVS would determine which areas are visible to a player
Caustic maps:
Kind of a minor thing that I think would be cool. Currently, in my engine, caustics are applied to everything underwater, but it would be cool to have them applied based on light angle, reflected onto nearby surfaces, etc.
This is all very ambitious, and I'll probably never get around to it, but it would be cool. I'm trying to decide what approach I should take if I go forward with it.
I was thinking of using this as an opportunity to learn something like C#, where the UI would be much easier to implement. I'm not sure if that's the kind of UI I want, though. If I do something like Wings3D, I will likely have to do highly specialized context menus. Radial menus would probably be the fastest user interface (ex: right+click, mouse right, mouse up might create a new cube -- easier muscle memory than trudging through drop-downs looking for the item you want). If I do something like that, I'd probably be better off writing a custom UI system in OpenGL.