Brush-like editing like with GtkRadiant

I grew up in 3d editing with Quake tools. Notably, I did a lot of level editing with Radiant. Now I find myself in a side project using Unity, and I want to drum up a game level. I find that Blender’s common UX makes this kind of slow in comparison to Radiant. It is fine for modeling objects; I am just hoping I could get the tool to take less effort in initially prototyping man-made spaces.

For those that do not understand the UX behind tools like Radiant, they work with “brushes,” which basically means convex objects. For the most part, these would be axis-aligned rectoids courtesy of a tiled view looking from each major axis. Left clicking the center of a brush would move it. Left clicking the edge of a brush would resize from that edge. Grid snap was quickly adjustable and a lot of connection was done just by putting brushes beside each other. Selecting a texture with a brush active would apply it to all sides with a standard tiling (by default).

There was of course ways to insert game logic entities too, but I concede that is for Unity’s own editor, unless I get into some Python scripting and come up with an entity format . . . no thanks.

The result of this would be crude in comparison to all the things you could do, but it would give a good prototype and something to refine with more conventional methods.

Are there some trivial ways I can get this experience in Blender without wrecking it for the fine tuning?

I think I can expand on this in a way that people unfamiliar with Radiant can understand. Note that some of this behavior is not exactly what Radiant can do, but I’m trying to generally accelerate level editing in a Radiant-like way:

  • Adding axis-aligned rectoids: The default “Add Cube” is not a huge problem, but I always end up having to thin it down on one side. I vaguely recall it’s not a big deal to add a new command to drop down a new primitive in Blender, but would there be a way to drop a flattened cube (rectoid) aligned against a plane? As an example, if I am in a 3d editor window aligned on xy, then I am looking vertically. I would hope then that it could take my grid snap to make a floor piece as thick as my grid snap, and something roughly 4 times as long and wide by default.
  • Adjustable grid snap: I know about the snap tool and it can be used to roughly move a selection along grid boundaries, and I can edit the grid in the 3d view properties–whatever comes up when you hit ‘n’ in the 3d editor. I was hoping to have grid snap be default default and adjust that snapping resolution with one command. Generally, I want to reduce the amount of overhead from changing this.
  • Automatically move objects along axis when clicking roughly in their center: I currently have to press ‘g’ and the axis I want over and over and over again. The ‘g’ and ‘y’ keys are more in the center of the keyboard so I have to reach for them. This sounds anal-retentive, but it’s big deal for something I’m doing 3+ times per piece, in game levels that can thousands of them. The axis alignment would mean that if I am looking at the xy plane, dragging along the center of a selected object would start moving it either along the x or y axes, depending on the direction I drag. It would also move it in increments given by the grid snap.
  • Automatically resize faces along axis: If I drag the edge of an object with the mouse, I hope to resize along the face connected to that edge that is otherwise hidding from view. I am not literally selecting an edge in edit mode, but rather dragging from the edge of the rectoid and hoping it can infer I want to manipulate that entire side of it. This is a particularly tedious operation because I have to tab into edit mode, switch to faces if I haven’t already, adjust my view to get that face, hit g, select axis, and then move it.

I am kind of hoping somebody sees that and in their heads thinks it’s not that hard because it’s just one magic keypress or something. I’m hoping there are just some shortcuts I don’t know about that make this stupidly easy. Otherwise, I’m almost ready to put time into the Python API to see if I can make some stuff like this accessible.

Also, this does lead to a lot of boxy stuff, but I’m dealing with a lot of man-made environments, and I can use the rest of Blender’s fine features to manipulate all these rectoids into something more interesting.

I suspect I will be doing a lot of replying to myself here. At the worst, it just means the next poor slob that comes along hopefully finds this in a Google search.

In this case, I’ve discovered that new in Blender 2.76 is an extra mode to grid snap that makes it respond better to adjustments in grid snap settings. The grid as-is is still a little clunky but I am suspect I have not completely figured it out.

It looks like the kind of stuff I want is common with the CAD people, and I have been finding tips approaching it from that angle.

I think the main reason you aren’t getting any responses is because you aren’t simplifying your question.

If there is another app that does what you want then post a video of the process, it’s better then dragging out an explanation.

It’s kind of an older tool so there isn’t too much out there. Here’s an old tutorial of something like what I used back when:

There’s no audio, and it’s explaining everything with transition text, so the video is roughly 3 times as long as it has to be. I linked to where it started to get interesting for the user experience.

After watching the video, it seems almost exactly the same as most CAD programs (at least the same as the one i am using, which is Autodesk Inventor)

I’m still not exactly sure what you want but i will try to answer some of your questions from my understanding so far.

Adding axis-aligned rectoids: The default “Add Cube” is not a huge problem, but I always end up having to thin it down on one side. I vaguely recall it’s not a big deal to add a new command to drop down a new primitive in Blender, but would there be a way to drop a flattened cube (rectoid) aligned against a plane? As an example, if I am in a 3d editor window aligned on xy, then I am looking vertically. I would hope then that it could take my grid snap to make a floor piece as thick as my grid snap, and something roughly 4 times as long and wide by default.

You don’t have to start with the default cube every time you open up blender, model the default floor you wish to start with when blender opens and then click “File > Save Startup file”.Every time you start up blender it will automatically load the floor model you made.

Adjustable grid snap: I know about the snap tool and it can be used to roughly move a selection along grid boundaries, and I can edit the grid in the 3d view properties–whatever comes up when you hit ‘n’ in the 3d editor. I was hoping to have grid snap be default default and adjust that snapping resolution with one command. Generally, I want to reduce the amount of overhead from changing this.

You can use grid snap by holding Ctrl with the default config, no need to toggle it on and off.If you want to toggle it you can press "Shift+Tab"You can also press and hold “Shift” with grid snap on to move your active in smaller increments.Pressing “Shift+S” will also give you a few snapping options.

Automatically move objects along axis when clicking roughly in their center: I currently have to press ‘g’ and the axis I want over and over and over again. The ‘g’ and ‘y’ keys are more in the center of the keyboard so I have to reach for them. This sounds anal-retentive, but it’s big deal for something I’m doing 3+ times per piece, in game levels that can thousands of them. The axis alignment would mean that if I am looking at the xy plane, dragging along the center of a selected object would start moving it either along the x or y axes, depending on the direction I drag. It would also move it in increments given by the grid snap.

You could always just use grid snap for this, it should be easy to see if an object isn’t aligned along an axis.alternatively you can just bound X, Y and Z to something else, a keyboard or mouse with macro support would be useful in this case if you have one.

Automatically resize faces along axis: If I drag the edge of an object with the mouse, I hope to resize along the face connected to that edge that is otherwise hidding from view. I am not literally selecting an edge in edit mode, but rather dragging from the edge of the rectoid and hoping it can infer I want to manipulate that entire side of it. This is a particularly tedious operation because I have to tab into edit mode, switch to faces if I haven’t already, adjust my view to get that face, hit g, select axis, and then move it.

Or you can press Tab to go into edit mode,turn off “limit selection to visible” (i have this saved as turned off by default), press “ctrl+tab” and select “face”,select the dot sticking out of the face you want to move (you don’t have move your view so you can see it, you only need to know where it is), hold “Ctrl” and then drag the face in the direction you want.

Sorry if i am a bit ignorant with the subject but perhaps those tips will help.Also erm… , do you model from the numpad axis orthographic views or from the user orthographic view?

Thanks for taking a shot at this.

I haven’t actually used formal CAD software, but I’m not surprised if Radiant mimics that workflow. I think dedicated modeling software was young at that point. GtkRadiant has a lineage going back to QuakeEd in 1995. Blender was a concept in NeoGeo at that point. I do know that Googling with an eye for CAD in Blender has been fruitful.

You don’t have to start with the default cube every time you open up blender, model the default floor you wish to start with when blender opens and then click “File > Save Startup file”.Every time you start up blender it will automatically load the floor model you made.

The initial cube is not the issue, but rather I was hoping when I adding a new object that I could get something already bound to the grid. It does not sound like a hard thing to do in Python but I wanted to know if it was already there.

You can use grid snap by holding Ctrl with the default config, no need to toggle it on and off.If you want to toggle it you can press "Shift+Tab"You can also press and hold “Shift” with grid snap on to move your active in smaller increments.Pressing “Shift+S” will also give you a few snapping options.

Heh SHIFT+S gives me the other snapping options. I’ve been using the grid snap next to the magnet in the GUI. It looks like snap has a few menu items. That Ctrl trick looks useful. I have to try some of this over days; I’m editing existing geometry right now rather than adding, so I have not put enough time into it yet to tell how much more productive it is.

Or you can press Tab to go into edit mode,turn off “limit selection to visible” (i have this saved as turned off by default), press “ctrl+tab” and select “face”,select the dot sticking out of the face you want to move (you don’t have move your view so you can see it, you only need to know where it is), hold “Ctrl” and then drag the face in the direction you want.

That’s what I settled on when the thread was started. I was not good about CTRL+TAB. Still, I think my issue is having to switch from object mode to edit mode to move the object wholesale versus move its faces. I sound like a brat, but I’m trying to reduce intermediate commands for speed.

Sorry if i am a bit ignorant with the subject but perhaps those tips will help.Also erm… , do you model from the numpad axis orthographic views or from the user orthographic view?

I am flying back and forth between them. Classic QE4 Radiant will give one user perspective view with 3 orth views from the major axes. I can set that up in Blender but I wanted to try the “Blender way” first. Also, axis clamping generally worked regardless.

If it does not bother people, I will probably continue to post discoveries–including any Python shenanigans–in here as I settle this down. That’s just mostly so the topic Googles well for the next Radiant old-timer trying to figure out how to make Blender work the way they think in their head.

I’ve worked for years with both radiant and blender, but never with unity. I’m kind of surprised unity doesn’t have a BSP tool by default. Apparently, there is a tool for unity called ProBuilderwhich offers exactly what you want.

As for blender, if all you want is to quickly block out a level, why bother with several objects? I’d just use one object and only work in edit mode. That saves you a lot of selecting of objects, tabbing, exporting and importing. Or if you really want multiple objects, you could still separate them afterwards (Hotkey: P). You can merge your objects by selecting them and pressing ctrl+j.

Work a lot with orthographic views, that saves you from having to define an axis when you grab or extrude faces, or move objects. In case you don’t already do that, there’s an option in the blender user preferences (Input>emulate numpad) to use the basic number keys in addition to the numpad to change the view, which might be faster than to move your hand to the other side of the keyboard or use your mouse hand. You can also bind the keys you often use to something easier accessible, if you find yourself reaching for keys like g and y.

As uvs don’t matter when you’re just prototyping, I’d simply do a smart uv unwrap of everything at once and scale it up. Or, if you want radiant like uvs while working, you might want to check out this method. I faintly remember an addon that did the same thing but I couldn’t find it with a quick search.

I don’t really know what you’re building and how you go about it but maybe this tip helps. I would work with one sided faces to build stuff, not with meshes that have a volume like a cube, or brushes in radiant. In radiant you would usually caulk 5 of 6 sides of your brush anyway, no need to build them in blender.
If you want to build a room, you actually only have to build the walls. Start with an edge with the height of your room; go to top view; use vertex select mode, so you can see the edge, while it’s pointed straight up at you; and just extrude the edge as often as you need to build your room. If your room in convex, creating the ceiling and floor is easy. Select the top edge loop, press F to make a face for the ceiling, which will be an n-gon but since it’s only prototyping nobody cares. You can turn it to tris before exporting if you need to. Do the same for the bottom edge loop to create the floor. If your room is concave you need to do a bit more selecting (manual right clicking , box selecting or selecting from one vert/edge to another with ctrl + right click) and make a few more faces.

I would say blocking out a level in blender is about as fast as doing it in radiant (I have no time measurement, just a feeling), it’s just a slightly different workflow, work with edges, not cubes/objects. At least that’s how I do it.

I hope you find some of this useful.

The free one couldn’t texture so I set it aside while I dug up Blender again. I had made a few models in it before trying to make a level, so I had at least a little experience with it. I might just fall back and put down the… $100 or whatever it is for a license if ProBuilder slathers out the levels pretty well.

I should just watch a video on level editing with it and make up my mind that way.

I wouldn’t say I’m just prototyping the level though. I’m prototyping the whole process. I just didn’t get too far with it yet. :spin:

As for blender, if all you want is to quickly block out a level, why bother with several objects? I’d just use one object and only work in edit mode. That saves you a lot of selecting of objects, tabbing, exporting and importing. Or if you really want multiple objects, you could still separate them afterwards (Hotkey: P). You can merge your objects by selecting them and pressing ctrl+j.

I don’t know how I’m doing it, but the objects I’m adding are getting bunched together already. I suspect I always add objects while I have an existing object selected.

As uvs don’t matter when you’re just prototyping, I’d simply do a smart uv unwrap of everything at once and scale it up. Or, if you want radiant like uvs while working, you might want to check out this method. I faintly remember an addon that did the same thing but I couldn’t find it with a quick search.

I was about to come in the thread and make noise about UV unwrapping since that’s where I’m puzzled right now too. I should have tried to drop a few textures on the level before getting carried away.

The closest method I found basically turned the texture into a texture atlas and made UVs map into it. It’s still a bit more tedious.

Since you asked, this is what I have right now:

I had decided to splurge on a copy of ProBuilder Advanced and I’ll see if it shuts me up. I think I may have to come to terms with level editing being different from modelling, even if I’m working with an engine that’s all about meshes. Still, I’ll probably be able to make better comments on the UX afterwards. I might be derailing my own thread talking about another tool though.

We were in the same boat (actually for many years) where Blender isn’t perfectly suited for blocking out levels. We also didn’t like ProBuilder because it tied us down to Unity. We basically wanted to keep with GtkRadiant for the blocking and then Blender for the detail.

In the end we spent some considerable time hacking up the GtkRadiant source code to make it a “generic” 3D modeller, perfect for things like this. Now our general workflow is levels in Radiant, then export as .obj to Blender where we add detail.

You can find our heavily modified version (called OpenRadiant) here: http://thamessoftware.co.uk/openradiant/

We even added lightmap baking into OpenRadiant with an optionally extended .obj model format to provide lightmap coordinates. Of course you can also use Blender, Maya, UE4 etc, to generate the lightmaps. One of the major benefits of exporting as .obj means everything can read it in!

Hope it helps :slight_smile: