I guess I started to model monsters, then. Let’s start small with the Herd Sentinel.
For a number of reasons, I decided to try Blender for environments again. I wanted to do this for a while now, but the need to manually build collision hulls out of brushes, as well as the q3map2 compiler being annoying, kept me away from it.
I think the time is ripe for another attempt. I want to circumvent FTE’s patch mesh related problems – and let’s be honest, no one uses patch meshes anymore. I also want my assets to be future proof. BSP isn’t future proof. Patch meshes suck. And looking at the kind of detail in the SJ levels, I have to wonder how I managed to build that out of brushes without going insane.
I also decided to divide my levels into smaller parts. Instead of five or six mega-levels, SJ will then have perhaps 12 normal-sized ones. This has many advantages, too.
I went and broke up the herd base into three levels – Herdbase Labs, Herdbase Exterior, Herdbase Interior. The level changes will be visually smooth because some rooms are duplicated as needed. You can look into other levels at some points, even.
Then I exported Herdbase Labs into Blender. Here’s the result:
Everything gets chopped into random triangles by q3map2 during the conversion. Yay. Here’s that same area after an initial cleanup:
Much better. Turning everything into quads allows me to use Blender’s modeling tools to the full extent. Loop cut, bevel, you name it.
Trying to do environments in Blender is a whole different kind of business. You will be dealing with absurd amounts of polygons in a scene. Effective use of Blender’s navigation, view and selection modes becomes vital. Instancing and grouping objects becomes a life saver.
It becomes critical to divide your scenes into individual objects in the best way possible to preserve clean edge flow and topology. Trying to match up the edge loops of an entire room seems to be the road to failure. You need to start thinking in tiles and modules. And it is mandatory to learn how to snap things to the grid and perfectly align objects.
UV unwrapping things on the fly and pixel-perfectly aligning UV maps to textures is another required new skill. Doing trims is somewhat easier in Radiant, until you’ve got the workflow down for precision UVmapping.
I’m quite happy with Blender though. It is so much more powerful than any BSP editor.
What I’m doing now is slowly going through the environment, cleaning it up, and polishing objects that will occur in multiple instances. Doing environment art in Blender (or any 3D modeling suite) is probably a real test because of the amount of organisation needed. It’s not just learning the tool rather well, it’s also about establishing the best workflow.
I’m polishing these prefabs as I encounter them, in between cleaning up the topology of rooms. This will take a few weeks, but it probably is for the best. I hope to be able to use much of the old BSP levels as collision hulls / caulk hulls. We’ll see how that turns out.
Another thing you notice very quickly when going this route is that eventually, you will have to go fully modular. Not using repeatable modules is basically disastrous when you’re working at this detail level. My plan for the last few levels of SJ (those that aren’t a legacy from a Quake mod…) is to go for unique setpieces, but go completely modular for corridors etc. Doing all unique stuff is simply too time intensive.
In case you’re wondering how to convert all that back to brushes, I’ll have to disappoint you. I’m not planning to. The map compiler will have to deal with this. I have compiled maps including terrain meshes that have more polies than this entire environment, so I’m cautiously optimistic.
As requested by user nil, spawnhost now has a blurb about making physics objects in FTE using the Open Dynamics Engine. I believe this was originally a Darkplaces extension, so much of it should apply to both game engines.
Be warned that this is no cakewalk. The article is intended for advanced QC programmers and game devs. Not everything is spelled out in detail for simple lack of time, and it has “RTFM” in it.
If that doesn’t scare you, read on.
A few days were spent on adding physics objects to Scout’s Journey, driven by ODE. The hardest part was reading the entire ODE manual. It took a long time to divine all the obscure bits of information hidden around the internet and various source codes. Very little documentation exists for utilizing ODE in games using FTE or Darkplaces.
Anyway, I’ve got bouncing crates and rolling buckets in the game now. Things tumble over edges and down slopes quite naturally. Adding more physics objects is now largely a matter of copy and paste. I can also apply forces to physics objects e.g. by shooting them.
Some routines have been written to auto-enable/disable physics to save performance, and to restock the world with physics objects that have for some reason fallen through the level – this is still a small issue, although it doesn’t break the game.
I think buoyancy can be hacked in quite easily, so objects will swim or sink in water. It is a matter of endless tweaking, mostly. Currently there are only box and sphere geometries, I think cylinder and trimesh are work-in-progress judging from the FTE source.
Another thing I’ve done today is find out how to play SJ with a gamepad. I can report that there is gamepad support under Windows only at the moment. I hope Spike hacks up some gamepad support for Linux, too, at least, in the future.
My Playstation pad clone is quite usable already; I can even intercept gamepad buttons in CSQC. The problem with the GUI right now is making the cursor react to the gamepad.
SJ will probably provide some form of aim assist eventually, so you can play with a pad, although it’ll default to off. Personally I find playing with a gamepad a lot more relaxing, and SJ isn’t exactly a competitive multiplayer FPS, so having the option will be a nice thing.
The temple dungeon + temple setpiece have been joined. From now on, there is only “the temple.”
Surprisingly, the result is still pretty lightweight, probably because it’s really still a block-out. All the buildings etc. in the outdoor part are placeholders, and the dungeon part isn’t very detailed yet. But at least it is, sort of, layout complete. Pending a bit of fiddling with buildings and the exit part of the dungeon.
Yeah, I’m posting those gratuitous screenshots with blocky rocks because at least I’m getting somewhere. Don’t worry, better rocks and vegetation are on the way in Blender. I think the platform with the altar here will be a beautiful place one day. Some NPCs are supposed to hang around there once I make them.
Placeholder boats and everything, still. But from now on, I can model those assets piece by piece and drop them in.
The joining of the two maps in Radiant; it’s laughable how small that entire stupid dungeon seems now. Also note how ginormous the actual temple building is.
Some terrain sections have been cut out to make room for the dungeon entrance. The resulting hole will be plugged with a mesh, hopefully making it look a bit like a mine entrance.
There is now a portal room in the dungeon, too; this is obviously a placeholder. The other portal is in the Herd base map. There are no other teleporters in the game; the temple will serve as a kind of travel hub.
I have been working on the herd base as well, I hope to get that layout complete soon so finally these bothersome levels are at a stage where I can go and do mostly other stuff for the rest of the year, again hopefully.
The four levels of dungeon have been roughly textured and joined together. It compiles, ship it!
q3map2 (the map compiler) hates me for this. Thanks to Lord Havoc (Nexuiz, Darkplaces) for pointing me in the right direction; my levels seem to justify raising blocksize and gridsize to avoid out of memory problems. This one provoked a crash in MergeMetaTriangles (hooray, a different part of the compiler crashes) before LH’s advice fixed it.
Next step: Put torches in the lower levels, spend a few hours in Blender to optimize meshes, then proceed to fuse this dungeon with the actual temple setpiece. After all, it’s not fun until the compiler screams.
Shots after I put in some pretty.
Continuing the temple dungeon. First texturing and lighting passes; I’m inclined to use a different wall texture on each floor of the dungeon, changing from a smooth rock texture to something like mouldy, decayed bricks the deeper I go. The thing is lit with only torches atm, but that will change over time.
Among my influences for this level are Bioshock (the use of circular layouts full of loops and figure eights in order to give the player more options), The Dark Eye: Drakensang (modular stuff and texturing), and probably also Tomb Raider: Anniversary (it’s hard to describe what I took from that, probably things like the pools of water and the platforming as well as the fact that the entire level will be a puzzle.)
The torches are realtime lights; shadowmaps are doing their thing here plunging whole chunks of the level into darkness. Let’s see where this will lead. I’m liking the results so far.