News | Forum | People | FAQ | Links | Search | Register | Log in
Microbrush 3 3D Modeler
Hello! :)

One of my hobby projects is a little 3D modeler/level editor for brush-based engines such as Quake or Source. I originally started working on it because I was really annoyed by how long it took to make basic brushwork in Valve's Hammer. Some inspiration for it stems from the Radiant series of level editors.

It requires Win7 or higher to run and renders its stuff with OpenGL 3.3. If your graphics driver is up to date, it should work. It's portable, so it just needs to be unzipped and can then be used from the target folder.

Project page:
After unzipping, run "First start and tasty fresh cookies!.bat" and follow the instructions. For a reference of the configured shortcuts, have a look at the config.cfg file.

Here I've recorded myself building some random stuff with it:

This is a Twitter account to go with it:

At the moment, the focus is almost exclusively on brush work. The editor can't process texture or entity information yet, so please don't resave an existing world with it unless you want to get rid of all textures and entities. :)

It supports loading and saving
- its own textual or binary formats
- Half-Life 1 .map files
- Half-Life 2 .vmf files
- Quake 3 .map files

Additionally, you can run an export in its textual format with computed data (such as polygons) included, or export the same data as a Wavefront .obj file.

Pretty much all the business logic in the editor is written down in plugin code that's compiled in the setup stage. To look under the hood, check out datasourcesplugins.
The grid supports being skewed/rotated or configured to display ellipses instead of parallel lines. The respective shader and also the shader used to color the brushes can be seen in datashaders.

Hope this is useful to some. :)

Edit: updated URL
First | Previous | Next | Last
I Feel So Alone In My Thread 
Ctrl+F5 on to see the new version (2015-12-08).
* Fixed an undo/redo-related crash when closing a world or the editor
* Added logging for the modeling tools - you now get live feedback on deltas, dimensions, counts, etc.
* Extended the help system (comes up when you press F1 while hovering over a window, then rightclick on something) to display relevant currently bound shortcuts (main menu and Mb3 tools)
* Deleting the selection set 1/2 is now properly undoable
* Help messages and error messages are now displayed in the log even if the respective plugin is deactivated in the log
* Modal tools are now canceled by nonmodal tools, too (e.g. making a box is canceled when deleting the selection)
* The main menu now has a button explaining the not so obvious window controls
* For better performance, the brush shader is now reused when a world is closed and then a new world created or opened
* Extended the FAQ a bit
* Bound opening a .mb3txt file to Ctrl+O (you can change that stuff in config.cfg)
* Bound opening the toolbar to F10 (horizontal) and Shift+F10 (vertical) 
YUP, Must Be It... 
"fixed a crash when closing a world"

I can duplicate the crash when closing worlds in WINE & Windows 10 pretty consistently, so most likely that was it.

MIA: Yeah I've been sick last few weeks.

I still haven't used Microbrush3 too much other than getting it to install/run in WINE. I do try each update you come up with to make sure its still working in WINE for those who need it. It's interesting and reminds me a bit of Trenchbroom. 
Planning for texture support now.
This is gonna be a very complex change.
Good Luck! 
My host,, will shut down soon.

I'm moving to 
Updated Thread ^^^^ 

I've conceptualized how I could do textures from a technical point of view.

The current plan is for the editor's config to point at a texture folder filled with an index file and images. The index would map texture names to image file names. I don't intend to connect directly to pak files or wad files or anything, could think of a separate extraction process later on.

The geometry data that Microbrush "thinks" with will get named properties for the planes; Texturing will be realized using a named string property for the material name and a named UV property for the UV settings. I'm making it so that if needed, I could edit other plane properties using the same system later on, or even have different skins with different UV maps. And if it works out, I can add a named numeric property just the same to represent the lightmap of a brush face scale in Source, for instance.

I've already thought of some plugin API functions I'll need to build a surface inspector. I don't plan to introduce a concept of "selected brush faces", but rather opt to do raycasts in 3D to read and write material properties. This does not imply that any change to a texture or UV would need a manual click -- I can just repeat a raycast from plugin code, after all. But before I can really put effort into the usability of such a tool, I need to do my technology homework.

Oh, and I'm kinda leaning toward leaving what one would otherwise use caulk in Q3 and nodraw in HL2 for completely untextured. The conversion to the target map format could autotexture such "technical back faces", and maybe I could even make it possible to augment an exported .obj file with texture and UV information, and optionally discard untextured faces.
So many things that could be done... 
Playing With The Shader 
Playing With The Shader Turned Into Different Render Modes 
Figures I will need different ways of displaying things when I want to display textures, so I might as well add a few other things I thought of. I hope the black wireframe is good enough... because it's a fake wireframe mode done in the shader on the brush surfaces. 
Luckily These Icons Are Simple To Draw 
Adding a means to quickly arrange the views of a world in useful layouts. 
... of course it became yet another toolbar! 
You're doing an amazing job, it's just so sexy and looks so polished. 
A new version is available for download:
* Added a tool to switch render modes
* Added a tool to layout views
* Added a better font
* Thinned viewport borders
* Polished some things 
This Will Be A Day For Me To Remember 
I got bindless textures to work in Microbrush. o_o

This test shader accesses textures from graphic memory wildly without any extra draw calls or stitching or anything else like that. I don't know yet how well it will scale, but damn, this feels good now. :D 
Refurbished a few plugins and figured out that my neat spatial data structure for speeding up everything did not really speed up anything because I forgot to implement all the relevant prefiltering. It's in there now.

Made progress on the property stuff, can now associate string properties with brushes (no plugin yet) and worlds (plugin shown):

Trying to add a cylinder and pyramid tool now, and other little things: 
I forgot to implement all the relevant prefiltering. It's in there now.

I'm glad I'm not the only one who does something like this. Impressive that it ran with reasonable performance at all. 
One Step At A Time 
Finished the bulk of GUI stuff for new planned features, next I have to fill them with life.

This will be a cool version 1.0.0, in 2028. 
I've tried to carve out textured rooms from a voxel space and bake that into brushes. I guess this could be useful for random level generation... hm... 
That's Cool 
Any updates on your project 
Many new construction sites in the editor's plugin code (following my concepts) and leisurely slow development every now and then. The thing I've worked on the most lately are new camera controls.

My biggest concern, a crash bug that I found regarding bindless textures, is seemingly being worked on by ATI/AMD, so that's good. 
First | Previous | Next | Last
Post A Reply:
Website copyright © 2002-2017 John Fitzgibbons. All posts are copyright their respective authors.