PlanetCell on Blender Cycles – Improved Speed

Previously, I began work on a PlanetCell noise-based world map generator. Work on PlanetCell kind of came to a screeching halt, in large part because rendering proved to be so slow. For my purposes, it seemed entirely possible to make decent map render with Blender’s internal renderer(in fact, it has a better selection of procedural textures installed), but I can’t figure out how to composite multiple textures in internal. I recently saw a YouTube video by Andrew Price on speeding up Cycles renders. With that information under my belt, I decided to try some initial speed optimizations for PlanetCell. I’d consider this version 0.1.1 as I haven’t changed any of the actual texture generation procedures. I figure after I’ve got a fully-developed world map generator I should also optimize the OSL code. But for now, I’m just going to go over Mr. Price’s optimizations.

Some optimizations I found to be impossible for my old, sad computer. My GPU, sadly, is not recognized by Blender. So I’m stuck in CPU rendering. This is a big optimization, and I’m hoping my next computer will have a Blender-recognized CUDA device.

I know that I only have one light source and I have no desire to deal with reflections, transmissions and such, so I set all bounces to 0. This makes rendering a bit less processor-intensive. I also set the integrator preset to Direct Light. I unchecked shadows and all caustics and set filter glossy to 1.0 to reduce noise. I reduced samples from 10 to 4. I raised the internal light strength all the way to 800 and cranked the film exposure down to 0.03 to put more light energy on the subject but keep the effective brightness down about where it had been. Also on the film tab, I increased the filter width to 3 pixels. Again to damp down noise. Also, following the advice of Andrew Price, I reduced the tile size to 32×32. I tried 16×16, but this seemed faster.

I did make a few minor alterations to the texture of the planet surface. Inside the Sea Coloring group, I reduced the distorting noise to 1 octave of detail. I also reduced the Detail of the Sea Coloring itself to 2 octaves. To make up for these changes, I doubled the Distortion strength to 0.2. Mostly for aesthetic effect, because I’m still unhappy with the look of the sea areas, I decreased the scale of the Sea Coloring group to 9,6,9 and changed the scale of the internal distortion noise to 3,3,3. Reducing octaves in noise that isn’t really all that satisfactory anyway should speed up rendering. I don’t expect I’ll be adding much additional complexity to the Sea Coloring group. If anything, I may choose to ditch it altogether in favor of a solid color. For now, though this will have to do.

While the Height generator is still unsatisfactory, I’ll save further work on that for another time. In fact, I might prefer generating elevation data externally, loading it as an image texture, and using PlanetCell as merely a beautifying step. I will probably keep the internal generator as an option depending on how well I get it working.

I guess I’ll refer to this as 0.1.2, because I had some work on optimizations which I’ve lost along the way and I did, ultimately, make minor changes to the texture.

While the earlier version took just about all day(6-8 hours as I recall _I ain’t doing it again_), this one took only 43 minutes and 35 seconds. A major improvement! The actual map image produced is shown at the top of the page.

Although my initial thought was that this was too minor an update to bother posting, after seeing how much of a speedup I got, I decided to put it up for those interested. It’s right here on Google Drive.

Please feel free to use the comment system to leave any comments or questions. Thank you,
The Astrographer

Advertisements
Posted in Mapping, World Building | Tagged , , , , , , | Leave a comment

A Few New Things About Wilbur

This post is just a quick aside about a few things I noticed about Wilbur while working on my last post.

The conventional rendering style on Wilbur.

• Typically, when I want to show hillshade on land, but not on the water, I go through a somewhat involved procedure. First, I save a seamask for the surface I’m working on. Then I load a copy of the fully unshaded surface image(Texture>Shader Setup… General tab and in Display Type pulldown select “Height Code”), and load that into Photoshop. Finally, I create a fully shaded surface image by selecting “Lighted”. I load the shaded image as a layer above the unshaded layer and use seamask as a layer mask for that. Not horribly complicated, but I’ve learned an even quicker, simpler method.

Open the Shader Setup… window under the Altitude tab. In both the the Land and Sea areas, there is a text field labeled Opacity. By default, this is 0, But if you set it to 1, the shading for that part of the map will be altogether hidden. You can also select values between 0 and 1 to tone down the hillshading without eliminating it altogether.

The Photoshop methodology may still be somewhat more flexible. Best of all, if you save a copy of the Lighted map with a straight white background and composite it in separately in Photoshop. Still, this provides a quick method with good results. It also makes the Wilbur feature set just marginally more in line with Fractal Terrains.

Altitude shading is completely obscured over water when the opacity in the Sea section is set to 1. No Photoshoppery involved.

• For temperature, I used a very loose approximation of insolation. I should have taken the fourth root of that, e.g. sqrt(sqrt(cos(asin(y)))) rather than cos(asin(y)). Unfortunately, this causes a very narrow band of maximum values on the southernmost edge of the map. These should all be minimal values(-1 on a -1,1 scaling). This is frustrating. Am I doing something wrong in my setup or is it a bug in the program? I dinnae.

• As a second, and ultimately better and more flexible method for generating temperature(and hopefully precipitation and other) models, I tried using Mathematica and Matlab/Octave. Unfortunately, most of the high-bit export formats available to these are not importable by Wilbur. Even .mat, which Wilbur has, is not portable with the versions of .mat exportable by my version of either of those apps. Unfortunate. I might have to convert with gdal.We’ll see if I can make this work…

• While fBm, Ridged Multifractal, and to a lesser degree Heteroterrain all work perfectly well with the default settings of H=1.0, Lacunarity=1.9, Offset=1.0 and fgain=2.0, the other fractal types in the Calculate Height Field filter are less successful. After a lot of experimentation, I found that H=0.5, Lacunarity and Offset=2.1, and fgain=1.5 worked quite well for Multifractal. This was a  particularly finnicky fractal by the way. I had a hard time finding settings that worked well.

This is the Multifractal type with H=0.5, Lacunarity=2.1, Offset=2.1 and fgain=1.5. The texture also has a reduced shading on the sea areas(Opacity=0.9).

Next, for the Hybrid Multifractal, I used parameters given by Doc Mojo himself. H=0.25, Offset=0.7.

This is the Hybrid Multifractal type as generated with Musgrave’s preferred settings. Not bad, but not great.

Because of the small value of H, there seems to be little spectral variability. It makes for a somewhat different effect than I’m used to, but it adds another tool to the kit.

It should be noted that not all of the height field generator types use all of the parameters. fBm uses only H, lacunarity, octaves, random seed, sphere center or position(which can be used to alter the specific appearance without changing the random seed), sphere radii or size(which determines the base spatial frequency of the fractal), scaling(which determines the range of heights produced by the fractal function), spherical evaluation(which determines whether the fractal is generated on the 3d surface of a sphere or a 2d planar surface), spherical area(which determines what slice of the spherical surface is covered by the 3d generator) and sphere axis(which… seems to do… nothing…). These parameters are all used by all of the generator types except recursive subdivision(plasma) and math function(neither of which are covered here).

Heteroterrain, which is described on page 500 of Texturing and Modeling-A Procedural Approach, 3rd edition(I can’t seem to find an available version on the internet…) as Statistics by Altitude. To quote Musgrave,”The observation that motivated my first multifractal model is that, in real terrains, low-lying areas sometimes tend to fill up with silt and become topographically smoother, while erosive processes may tend to keep higher areas more jagged. … We accomplish our end by multiplying each successive octave by the current value of the function. Thus in areas near zero elevation, or “sea level,” higher fre- quencies will be heavily damped, and the terrain will remain smooth. Higher eleva- tions will not be so damped and will grow jagged as the iteration progresses. Note that we may need to clamp the highest value of the weighting variable to 1.0, to pre- vent the sum from diverging as we add in more values.” This one adds an Offset parameter.

Hybrid multifractal is described in the above book(also starting on page 500, as,”My next observation was that valleys should have smooth bottoms at all altitudes, not just at sea level. It occurred to me that this could be accomplished by scaling higher frequencies in the summation by the local value of the previous frequency… Note the offset applied to the noise function to move its range from [−1, 1] to something closer to [0, 2]. … You should experiment with the values of these parameters and observe their effects.” Again, this one has an Offset parameter. It displays heterogeneous terrains(surprise): flat plains, foothills and jagged mountains.

Ridged multifractal is described as similar to the previous hybrid multifractal. It uses the offset parameter, but also an additional gain parameter(fgain in Wilbur). The parameters given by Musgrave are the same as the default parameters(H:1, offset:1, gain:2), not surprising as Ridged Multifractal is the default type for the Height Field Calculator.

Multifractal is described as a “multiplicative multifractal”. At the time Texturing and Modeling, 3rd edition was published, it was not well understood. It uses all of the fBm parameters, of course, and also offset. Although, I can’t find gain in Musgrave’s description or the code he presents, fgain does appear to have an effect in the Wilbur version of Multifractal. I can’t pretend to know why…

All of the fractal functions can produce good results, but many are very sensitive to exact settings, and for some the default settings are simply awful. They’re all definitely worth a bit of playing with.

I have in the past suggested that when trying to paint fractal effects into specific locations(generally using selections), it’s best to use homogeneous fractals(notably fBm). I’m not entirely convinced of this anymore. If the base frequency and scaling is chosen, heterogeneous fractals can add quite a bit of interest and “pizzazz” to your mountain regions and other terrains.

Hopefully, these notes will prove useful.

Thank you,
The Astrographer

Posted in Mapping, World Building | Tagged , , , , , , , , | Leave a comment

Creating Attractive Satellite-style Textures

This is the final, fully-textured hillshaded map image.

This post is going to be a short overview of a method for creating a plausibly-realistic and visually attractive satellite-view of a habitable planet.

First, I run tectonics.js until I find an attractive arrangement of continental features. Or… just, you know, continents. In Photoshop or GIMP, I create selections of high elevations and areas that appear to be highlands in the bedrock shader to serve as masks in later manipulations.

In Wilbur, I began by loading a selection of the land areas and slightly feathering it. With this selection, I added some low relief with Filter>Calculate Height Field… set to Hetero Terrain type and Replace operation. Then I loaded and feathered each of the other masks one by one and added additional relief using the add operation of Calculate Height Field. Each time I will change the random seed and increase the sphere radii. Somewhere between the lowest highlands and the higher mountains, I will change the type of the fractal from heteroterrain to Ridged Multifractal, so that the higher elevations will be more craggy.

Finally, I will load an image of the plates shader from tectonics.js to serve as a guide to placing additional mountains. Unless you paid close attention to the movements of the features as tectonics.js was running, you’ll have to simply choose some of the plate boundaries as areas to place additional mountains and hills. These can be added by creating feathered selections and applying calculated fractals as above.

I painted in additional details with the raise and lower tools, and then applied an iterative process of basin fill, erosion and noise to complete the elevation map. Save this set of elevations as a BT and a PNG Surface. You’ll also want a flat seas version, so Filter>Height Clip… Min: sea level(probably zero), Max: higher than the highest mountain on the map(Which you can find using Window>Histogram…). Also save this flattened seas elevation set as a BT and a PNG.

Now comes the real meat of this post: using the best features of Wilbur and Photoshop/GIMP to create a realistic-looking planetary surface texture.

The latitude shader in Wilbur still doesn’t work terribly well as of version 1.86, so I won’t be using that. Besides, I have come up with a method to use the much more powerful compositing tools of any good image processing app.

To do the ice maps, start with the elevations map in meters with seas flattenned, use Filter>Mathematical>Wilbur Scale(Multiply)… by an appropriate lapse rate(for Earth, with elevations in meters -0.0065ºC/m works). For Earth, this should result in a variation in temperature due to altitude of about 0 to -56K.  Next add in a sea level temperature variance. In Wilbur select Filter>Calculate Height Field… type: Math Function, operation: Add, expression: cos(asin(y)), sphere center: xyz(-1,-1,-1), sphere radii: xyz(2,2,2), spherical evaluation: checked(as always), surface scaling: to range: about 30 to -25 to allow room for some random variation. Extremes of mean annual temperature on Earth work out, after some very cursory research, to 35ºC to -26ºC as adjusted for sea level. Similarly cursory research showed that while mean annual temperatures are effected by altitude, and while the variations around that mean get much wider with distance inland and latitude, the means largely aren’t sensitive to distance from the sea. So as I’m just working out mean annual temperatures, I don’t need to take raw distances from the ocean into account. In order to add a little random variation, I ran a heteroterrain fractal with spherical radius of 8, only 4 octaves, and a scaling of 5 to -2.

A map of temperatures on this planet. I seem to be using too much noise, and the lack of definition of continental areas makes me think that I do not have enough midrange elevations. Red is hottest, down to yellows, greens and black. The sharp line between black and light blue is at 0ºC. Blues darken through purples towards black at the coldest temperatures.

I used an unshaded version of this map with a different color scheme to show a spatial distribution of mean annual temperature. I thought the image was effective, but I’m not happy with the amount of noise and it showed that the hypsometric distribution was not altogether satisfactory. Still working on that! I also think I might have done better with a ridged multifractal here.

With this temperature map, Select>From Terrain>Height Range… to create ice masks. For a  persistent snow and land ice mask, set the maximum to 0.0ºC. Salt water freezes at a lower temperature. For this mask, set the maximum to -13ºC. When applying ice and snow layers in your image editor, place the land ice layer above most everything else, but below any relief shading layer. I placed the sea ice layer above the hillshade to lighten it a bit. When I did this, I simply used the black and white masks directly, selecting the black areas with magic wand and deleting them. It might be better and certainly more flexible to use these masks as layer masks on some kind of nicely-textured ice color layers. I haven’t tried that yet, but it seems like a worthwhile experiment.

I got a lot of information from examining the shader code in tectonics.js, which I would find useful in shading my own model. For bedrock coloring, the modeller uses a gradient from mafic rock(RGB(50,45,50)) to felsic rock(RGB(190,180,185), based on height. For this, I used the original flattened seas elevation map with a two color altitude shader in Texture>Shader Setup… The colors would be the mafic color near sea level with felsic at higher altitudes. In retrospect I could have added noise to the elevation map for variety, but I didn’t this time. I also played with the colors a bit to make it more aesthetic to my eye.

The sediment color map is a latitude map generated as described above using the Math Function method of the calculate height field filter. I again used a two color gradient with a peat color of RGB(100,85,60) for the cold polar areas and a sand color of RGB(245,215,145) as we get into warming areas. This was based solely on latitude. I could have used the temperature map with a different noise seed, but instead I ignored altitude.

What tectonics.js refers to as mineral fraction, basically describes the amount of sediment covering the underlying bedrock. I used a straight flat seas elevation map with a two color gradient, ranging from white at sea level to black at the highest points. I used this in my image editor as a layer mask for the sediment color layer placed above the existing bedrock color layer generated above. Again, I could have used some additional noise to add variety to this, but I decided to keep things kind of simple.

Next, I created a vegetation color layer. Although tectonics.js uses a single jungle color of RGB(30,50,10) everywhere, simply varying the alpha strength over the underlying sediment and rock layers, I used a latitude-based temperature model as described above, with a two color gradient of a darker, more saturated variation on the jungle color at low latitudes and a lighter, greyer variation for high latitudes. I could have, and probably should have used the full latitude-altitude model, but I got lazy.

Rather than using a latitude based model, taking precipitation and temperature into account to build the vegetation mask, I decided to hand paint it, based on the satellite view map derived from tectonics.js. I’m thinking that, once again, the modelling process would result in a more interesting and possibly more plausible texture, but its a bit more complicated to derive a plausible precipitation map(the simulator uses k1 + k2cos(6lat) + k3(1-lat/90) – k4dist_to_cont_edge*sin(lat), complicated and the user has to work out values for k1, k2, k3 and k4, for the sake of simplicity, k4 can probably be set to 0.0) and the prospect of combining the temperature and precipitation maps(again, figuring out weights) was daunting. I also wanted a small positive altitude element to the precipitation, with varying strength depending on latitude. For now, I’ll just paint this in. Later, I might come up with something less uninteresting…

I started by creating a layer mask for my vegetation color layer. I filled the mask with black. Next I loaded a seamask selection. Make sure Sea White is not checked when generating the mask using Texture>Gray Maps>Sea Mask…, or if you’re using an already-generated white sea mask, simply invert the selection. We want our strokes constrained to the land area. Next fill in the land area with white.

Now, paint the broad strokes into the layer mask using a large, soft brush in multiply mode and a very light gray color. This will be to reduce the vegetation in the polar areas, and then to roughly follow the latitudes where most of the desert areas lie. If you were working in Wilbur, this would be around 30º N and S, but your image editing app probably won’t show such nice geographic coordinates.

I also painted out the mask in areas under ice, though with much less success. Ice-covered areas should really have no vegetation at all. Also high mountains should have reduced vegetation, although in desert areas, the might get a little more due to orogenic precipitation.

Next, using progressively smaller and darker multiply brushes, paint out the desert and less vegetated areas in more detail. Finally, using a river flow map from Wilbur as a guide stroke along the rivers in a smallish very dark gray screen brush. This will show floodplain areas that are considerably more lush in otherwise less vegetated areas, but will have little perceptible effect in heavily forested or jungle areas. Rather than hand-painting the areas around rivers, one could directly apply a green-shaded layer controlled by a blurred copy of the river flow map.

I created fully shaded flat maps with rivers shown clearly as in the image at the top of the page. For use in texturing a globe for 3d renderings, hide the river and hillshade layers and save the resulting image. This will be shaded in the rendering using a bump map or normal map derived from the elevations map. Typically, I would save the elevations from Wilbur as a BT and then use GDAL to convert it to a nice 32-bit tiff, but for those without gis tools or the willingness to learn them(GDAL is free, by the way), you can simply save it as a 16-bit PNG Surface directly from Wilbur(unfortunately, at least in Cycles, 16-bit PNGs don’t seem to work well, so use your favorite graphics editor to convert to tiff).

render_forblog

Good modelers can make excellent photorealistic imagery with the Blender Internal Renderer, but I can’t do much better than cartoonish. The render proved disappointing, but darn quick.

cycles_forblog

The Cycles rendering took a lot longer, but my skills with Cycles are still growing. In any case, I really should have upsampled the underlying texture images much earlier in the process.

The process is still very much a work in progress, but it’s leading in a direction I find very promising. A few notes.

• Upsample the textures. A lot.

•• Probably start with low-res, and heavily blurred masks. Add noise and apply erosion, then resample. Do this in multiple steps, upsampling both the masks and the heightfield, then adding noise and erosion. Erosion may be too slow at high resolutions, but hopefully 8192×4096 or perhaps 16384×8192 will be sufficient to avoid artifacting in the final render.

• Figure out how to create precipitation models analytically, rather than by hand.

• Create vegetation masks from temperature, precipitation, river flow and distance imagery.

Hopefully, the next try will be good enough for a final model…

Thank you for reading this,
The Astrographer

Posted in Mapping, Planetary Stuff, Projects, World Building | Tagged , , , , , , , , , , | Leave a comment

Repost: Toponymy

Some of the best mappers I know will quail in terror when the time comes to add names to their maps. Sometimes it’s just the problem of clearly labeling the various features of their newly created landscape without making it look bad. That’s a whole article of its own, and one I may be uniquely unsuited to writing. That’s a pretty common problem, but the even more common problem is the one of creating believable, consistent names for all of those features. In spite of the difficulty, and it is considerable, of clear and attractive labeling on a map, I’ve seen my share of beautifully rendered lorem ipsum names.

Actually, in a pinch, lorem ipsums aren’t that bad. At least they generally have a consistent sound. It’s difficult to create a large number of consistent sounding names off the top of your head.

This post isn’t intended as a complete or authoritative exploration of the process of creating names for map features. It is simply a quick survey of methods and ideas I have used myself or heard discussed. The intention of this post is to put up some possibly good ideas and hopefully spur some discussion.

The process of creating names often varies depending upon whether the world being created is intended to be alien, fantasy, or something from the very far future or distant past on the one hand or something like a near(-ish) future colony planet on the other hand.

In the former case you can have a very free hand. You can chose pleasant-sounding nonsense for places you intend to give a pleasant appearance(this could perfectly well be a false impression), like “Assaremin” and unpleasant-sounding names for places you wish to give a bad impression(this, too, can be a red herring), like “Kuntogoloth“. You can even give many names that would be equally be suited for a more familiar or realistic milieu, like “Pleasant Valley.” It could be assumed that these are translations of native names and not the actual names. This last variation gives the map-maker or author a way to differentiate between locales familiar to the POV characters and those more foreign locations. If written from the point of view of the elves, a particular coastal inlet might be referred to as “Western Bay”, while the same place might be called “Taga Winsiem” if written from the viewpoint of halflings far from home. On the other hand, the piece of land that the halflings refer to familiarly as “The Boroughs” might be written as “Mushar” if visiting elves are the viewpoint characters. In either case, “Taga Winsiem” would be the proper name in elvish for the bay and “Mushar” the proper name in halfling… -ish for the land. The translations give the readers more of a sense of familiarity shared with the major characters and the stranger sounds hint to the characters lesser familiarity with other places. Today, for the benefit of brevity, I’m going to discuss the problem of creating interestingly unique and self-consistent names for foreign languages. I’ll save the question of what those names might or might not mean for a later post.

With strange alien worlds, we have the problem as mentioned previously, of making the names sound both sufficiently consistent within a culture and sufficiently distinct between different cultures. One way of dealing with the first problem is with the use of name- or word-generation software such as WordBuilder, or sites like Fantasy Name Generator, Seventh Sanctum or the Star Wars Random Name Generator. These vary a lot in usefulness. Alfar’s WordBuilder has the greatest flexibility in terms of being able to build distinct and consistent vocabularies, but it does take a bit more work than the others to generate anything at all. Fantasy Name Generator and the Seventh Sanctum generators have a good variety of different patterns that might produce more or less distinctive and consistent vocabularies, and they are generally fairly easy to run, but you have limited control over the results. Actually, the Fantasy Name Generator has a more advanced text interface. It’s more complicated than just running the presets and less configurable than WordBuilder, but it does make a good middle-of-the-road solution to wordgen.

If you can get Hypercard stacks to run on your computer(good luck) then Rob Prior’s MegaLinguist was uniquely marvelous. Keyword: unique. It wasn’t just a word generator, but it could do a fairly simple statistical analysis on a user-entered corpus of words and generate similar words based on that analysis. The ability to analyze an existing corpus and generate random words based on that analysis seems like it would be a pretty high priority among conlangers, but this kind of utility is surprisingly hard to find.

One utility which might serve the purpose is Chris Pound’s language confluxer, lc. The direct results of lc are gibberish, but if you pipe the results into prop(for proper names) or fix(for other words), the results can be gratifying. For example:

./lc -100 sumerian.txt | ./fix > out.txt

Will generate a list of 100 “words” based on the contents of sumerian.txt, pipe them into the fix utility and then place the results in the file named out.txt. Lemon-squeezy! You could also use prop to generate proper names as the following, more generalized example indicates:

./lc -[#] [data file] | ./prop > [output file]

If you’re just interested in the statistics of the data file then you can run lc with the -s flag:

./lc -s [data file] > [statistics file]

The resulting statistics file will be a series of lines beginning with a pair of characters, a colon and a series of characters. For example:

ab:sssslloor

would mean that in the data file the pair of characters, “ab,” occured nine times and was followed four times by an s, twice by an l, twice by an o, and once by an r. This information could be useful in creating a script for WordBuilder or some other word generator.

The data file is simply a whitespace-separated plaintext list of words. Namelists from original Civilization could prove useful… At present lc is not only the best but the only tool I’ve been able to find for the sort of word-generation-by-analysis-of-existing-corpus that MegaLinguist did so well.

Once we have generated a good long collection of words and picked out the ones we like(trust me on this: no matter how good your generator or script is… you won’t want to use all the words generated), now comes the time to place them on your map. That is, to determine the appropriate locations for the names. With both my Shtakamashkan and Kazh maps(the latter was for a competition on Cartographer’s Guild, sadly even I didn’t vote for my map), I simply used one generator for all of the names and placed them willy-nilly wherever I thought they fit. Another way, that gives more of a sense of variety in the cultures of a world or region, is to use different parameters for different regions or “countries.”

Another tack I’d like to try at some point is to imagine a set of seed points on the map. For each of these seed points, you would generate a pretty large word list. Then you model migration of people from these seed points, periodically modifying the sounds of the original seed languages using a program like Mark Rosenfelder’s SCA2. With enough time and effort you could end up with dozens or even hundreds(!?!) of distinct “languages” from a handful of proto-languages. All with clear genetic relationships to each other. Seems like it could be interesting.

Now, admittedly, I need to use the word, “languages,” with a bit of care here. Hence, the quote marks… What you have is, at best, a collection of words(or letter clusters, at worst) with potentially interesting similarities and differences across regions. This doesn’t preclude building actual constructed languages on top of the locally-modified word lists. Some of the more interesting places might be worth giving that treatment later, but it is a time consuming process in any case. Getting a completed map up, at least for reference, would be facilitated by using simple naming languages. Later on when it turns out your city named Ga Badrash is grammatically incorrect for the language you develop, you can change the name to Gali Badraska. It’s not like you can’t find any old maps where Beijing is referred to as Peking for instance.

Good luck and good worldbuilding,

The Astrographer

Posted in Mapping, World Building | Tagged , , , , , | 1 Comment

Map of the World I Rendered in Blender

We'll start with a desktop-suitable version of the planet.

We’ll start with a desktop-suitable version of the planet.


So I decided to go back and make a larger version of the planet image I created previously for use as a desktop. Basically that involved just resizing an slightly recomposing the scene and rendering it. To add a bit of a half-assed atmospheric effect, I added an Outer Glow to the transparent planet layer. I think this still might have some value in combination with a good set of cloud and atmosphere spheres in Blender.

Next, I decided to create a flat map-style image suitable for gis tools and the like. The Cycles renderer is not terribly fast on my computer. The panoramic camera only makes the situation worse. So I made some modifications to the settings to try to reduce rendering time considerably. Hopefully without compromising the quality of the map image.

I have zipped up all(or most) of the blend files I used on this here

I set the resolution to 2048×1024, but any 2:1 aspect ratio will work(the X and Y values labelled as Aspect Ratio control the shape of the individual pixels; 1:1 square pixels are perfect). Output is an 8-bit RGB PNG with no compression. Samples were reduced to only 32 with no speckling I could see. It could probably be further reduced. I went with Direct Light for light paths. I’ve limited Light bounces to one for diffuse and glossy and zero for transmission, volume and transparency. Viewport is Static BVH for “faster render”, but I don’t think that will effect rendering outside of the viewport. Under Acceleration structure, Use Spatial Splits is checked for longer build time but faster renders. The build time at the start seems pretty short in any case, so it shouldn’t cause problems and in any case this should make larger resolutions a lot quicker.

I also made some changes to the node graph for shading.First, I disconnected the Bump node. It had no visible effect with the light coming from right in the center where the camera also resided. I also tried to take out the Glossy BSDF shader, but although the specular effects weren’t visible I found the water areas to be too dark.

The comparison with my previous PlanetCell map render is not perfect as the shader tree for PlanetCell was quite complex, and I was using a lot of OSL script nodes, which slow things down, but my previous PlanetCell renders took… HOOOUUURRRSSS. No. Literally. They took hours. Nearly an all day render. My render for this only took 31 minutes and 42.88 seconds.

As a further experiment, I plugged the Color Ramp into a Brightness and Contrast node and connected that and the original ramp into an RGB Mix node with the Greater Than and Multiply nodes used to drive the Mix Shader node plugged into the face node. Although I’d hoped that this would result in significantly faster renders, it took 32 minutes and 53.42 seconds to render. Basically a wash.

For a third experiment, I also reduced the Glossy light bounces to zero. That… also seemed to slow things down. It took 33 minutes 28.07 seconds to render. I don’t understand that at all, but whatever.

Finally, I simply lightened up the water colors in the Ramp itself and reduced the render light samples to eight. This time the render time was 7 minutes, 35.81 seconds! I also increased the tile size to 128×128. I wonder if there is some overhead in rendering and moving tiles? Let’s test that.

No other changes. I’m just increasing the tile size to 1024×1024. That separates the rendered image into two sections, so that my dual-core CPU can handle them in parallel. Rendering time 6 minutes and 3.62 seconds. Apparently, there is some benefit to the larger tiles, but apparently additional samples are expensive. Still pretty quick and decent render.

test4_cyclesmapraw

2048×1024

Now, we try a larger render. 4096×2048 with a tile size of 2048×2048. That took 21 minutes 49.22 seconds.

4096x2048 8 samples

4096×2048 8 samples

I tried an 8192×4096 render with a tile size still of 2048×2048 with 5 and 8 samples. The 5 sample version took 58 minutes 10.82 seconds to render, but it was much too grainy. The 8 sample rendering took 1 hour 33 minutes and 27.97 seconds, but still seemed a bit grainy.

Finally, I rendered an 8192×4096 render at 10 samples. This took me 2 hours 1.16 seconds to render. The improvement to graininess was minimal. I think I’d stick with 8 samples in the future, because the time cost was just too high for the negligible improvement.

8192x4096 10 samples

8192×4096 10 samples

Next week, I’m going to Disneyland on my daughter’s Make*A*Wish trip, so I won’t be able to maintain the pace of postings I have lately. After that, I’ll get right back on the horse.
The Astrographer

Posted in Mapping, Planetary Stuff, World Building | Tagged , , , , , , , | Leave a comment

Cultural Oddities List

Dressing Habits

  • Same clothes for all sexes.
  • Characteristic clothes for some group or groups.
  • Characteristic hats for some group or groups.
  • Characteristic masks for some group or groups.
  • Characteristic gloves for some group or groups.
  • Characteristic jewelry or accessories for some group or groups.
  • Characteristic cosmetics for some group or groups.
  • Some group has characteristic hair…
    • Shaved heads
    • Dyed hair
    • Unusual hairdos
    • Oddly coiffed eyebrows
  • Some group has characteristic facial or bodily alterations…
    • Finger or toenails worn long or removed.
    • Tattooing on face, body or both.
    • Hidden tattooing.
    • Scarification on face, body or both.
    • Hidden scarification.

Eating Habits

  • Characteristic foods or beverages for some group or groups.
  • Some group or groups have characteristic food preparation rites.
  • Some group or groups are segregated during meals.
  • Some group or groups are vegetarian.
  • Some group or groups eat only meat.
  • Some group or groups have taboos on color, shape, source or kind of food.Some group or groups eat only in special locations.
  • Some group or groups eat only communally.
  • Some group or groups eat only in private.
  • Some group or groups eat only at home.
  • Some group or groups have characteristic times to eat.
  • Some group or groups have rituals before eating.
  • Some group or groups have rituals after eating.
  • One group or groups prepares food for another or others.
  • One group or groups eats others’ leftovers.
  • One group or groups must wait until others finish eating before they can eat.
  • One group or groups practices cannibalism(perhaps as a funeral rite, perhaps otherwise).

Living Quarters

  • Some group or groups are expected to live privately.
  • Some group or groups live in segregated locations.
  • Some group or groups live at place of work.
  • Some group or groups have special living conditions.
  • Some group or groups live in extravagant quarters.
  • Some group or groups live in minimal quarters.
  • Some groups’ quarters are taboo to others.
  • Some groups’ quarters must be visited by others.
  • Some group or groups live with extended families.
  • Some group or groups live with groom’s family.
  • Some group or groups live with bride’s family.
  • Some group or groups live in communal housing.
  • Some group or groups are expected to move around.

Family Practices

  • Child named by member of some group or groups.
  • Child named for living relative.
  • Child named for dead relative.
  • Child named for hero.
  • Child named for member of some group or groups.
  • Child named for object.
  • Child named for date or season of birth.
  • Child named for object.
  • Child renamed at adulthood.
  • Child renamed at marriage.
  • Marriages are arranged, performed or both by member of some group.
  • Marriage only within group.
  • Marriage only outside of groups.
  • Members of some groups can only intermarry with certain other groups.
  • Remarriage prohibited.
  • Remarriage required.
  • Groom’s family pays dowry.
  • Bride’s family pays dowry.
  • Dowry paid by member of some group or groups.
  • Very short marriages the rule.Very long marriages the rule.
  • Non-marriage the rule.Very short marriages prohibited.
  • Very long marriages prohibited.
  • Non-marriage prohibited.
  • Divorce and remarriage required.
  • Surviving spouse must marry member of dead spouse’s family(widow, widower or both).
  • Surviving spouse must commit suicide after death of spouse(widow, widower or both).
  • Onerous prerequisites to marriage.
  • Marriage only at certain times.
  • Marriage must be permitted or blessed by member of some group.
  • Polyandry practiced.
  • Polygyny practiced.
  • Polygamy practiced.
  • Communal marriages practiced.
  • Open marriages common, typical or expected.
  • Children raised by some group or groups.
  • Bodies of the dead are preserved and frequently visited and consulted on matters of importance.
  • The dead are preserved as clothing or food items for relatives or friends.

Miscellaneous Customs

  • Unusual sleep time or duration for some group or groups.
  • Unusual location or orientation for sleep.
  • Some group or groups use a distinctive language.
  • Some group or groups have sacred symbols.
  • Some group or groups are assigned characteristic duties.
  • Members of some group or groups are expected to maintain public anonymity.
  • Drinking or drugs are prohibited.
  • Drinking or drugs are required.
  • Bodily abuse prohibited.
  • Bodily abuse required.
  • Special privileges for some group or groups.
  • Special privileges prohibited to some group or groups.
  • Characteristic greetings, mannerisms or leavetakings for some group or groups.
  • Secret societies for some group or groups.
  • Taboo against closed meetings for some group or groups.
  • Literacy prohibited for some group or groups.
  • Literacy required for some group or groups.
  • Psionics, magic, whatever are required or prohibited for some group or groups.
  • Cloning is allowed, required or prohibited for some group or groups.
  • Robots allowed, required or prohibited for some group or groups.
  • Weapons allowed, required or prohibited for some group or groups.
  • High technology(arbitrarily determined) allowed, required or prohibited for some group or groups.
  • Offworld(international, extratribal or whatever) contact allowed, required or prohibited for some group or groups.
  • Gift-giving customs for some group or groups.
  • Free food, clothing required or prohibited for some group or groups.
  • Free education required or prohibited for some group or groups.
  • Education(beyond some arbitrary limit) required or prohibited for some group or groups.
  • Certain punishments required or prohibited for some group or groups.
  • Certain training required for some group or groups.
  • Some group or groups have specific responsibilities.
  • Some group or groups can only be visited at certain times.
  • Bargaining and haggling are permitted, required or prohibited for certain group or groups.
  • Traveling long distances is permitted, required, prohibited for certain group or groups or requires permission from a member of certain group or groups.
  • Certain group or groups have their own holidays.
  • Certain group or groups are denied any holidays.
  • Characteristic leisure or recreational activities for some group or groups.
  • Leisure time and recreational activities are very regimented for some group or groups.
  • Characteristic rite of maturity for some group or groups.
  • Some group or groups have characteristic attitudes towards some other group or groups.
  • Unusual attitude towards life and death.
  • Some group or groups hold an unusual significance for flora, fauna, smell, sound, color, air, water, light, fire, darkness, clothing, computers, technology, robots, weapons, art, work, etc.
  • Daytime rest period or nap permitted, required or prohibited for some group or groups.
  • Superstitious belief in ghosts, spirits or gremlins.
  • Superstitious belief in bad omens.
  • Superstitious belief in curses, the evil eye or rituals to avoid such.
  • Superstitious belief in arithromancy, astrology, fortune tellers, etc.
  • Places of business have shrines or symbols to protect them from misfortune(statues of mercantile deities, burning of incense, wind chimes, etc.
  • Homes have shrines or symbols of protection or veneration for ancestors or deities.
Posted in World Building | Leave a comment

Christmas Repost: Cultural Oddities

Last night, my wife was telling me about a person of her close acquaintance who can get teared up looking at needlepoint. This came up after I mentioned a sociologist I heard on NPR. This fellow had mentioned that in some culture(I’ve lost any specifics), it was considered normal for people to see spirits. Yeah, this is my conversational style, fly off on tangents from orbit to orbit. My wife has learned to roll with this :).

Aaaanywaay, these folks see spirits. That’s normal. Not seeing spirits in this culture would be a little bit like not seeing cars in my culture. Similarly dangerous. These spirits are important. They provide guidance, warnings of danger, all manner of information that these people in their dense tropical forest environment(I remember that much) found useful and important.

Going on a tangent, I could ask, “What are they really seeing?” As a believer in a secular, logical, objective reality, I’m not about to suggest that they are really seeing the magical spirits of their dead ancestors or whatever. What I am willing to say is that they are aware of subtle hints in their environment, right at the edge of the sensory envelope, of the presence of dangerous or useful things. Much as I can see animals in clouds or faces in the random tufting of a carpet, they have been trained to see guiding spirits in those hints. This works for me, especially in the science fiction realm.  Now if you are writing a fantasy story with magic and ghosts, why not have actual personified spirits? No es problema!

A couple of tangents from one conversation and we see two things. The first is that all those tangents and non sequiturs can be a creative tool if written down. The second is that those little personality quirks can make for interesting cultural traits. Yeah, you could probably take other things from that conversation, too. The relation between creativity and a faulty memory, for instance, or the skills required to maintain a working relationship with a nutty husband…

A useful tool I found in detailing different societies was the Customs lists on pages 75-77 of the MegaTraveller World Builders Handbook(Amazon). These are lists of no more than 36 quirks in Dressing Habits, Eating Habits, Living Quarters, Family Practices and a couple of lists of Miscellaneous Customs such as sleeping location, gift-giving and specific holidays for different Practicing Groups such as Political Figures, poor people or everybody. Now the lists may not be hugely imaginative(What do you expect? This is my kind of book: mostly physical stuff… Even if they did mess up the illustration of eccentric orbits…). Let’s face it, you can easily extend the family practices list without going far beyond reading some Heinlein. On the other hand these are good for dislodging the little gray cells. As things come up, I add to the existing lists. All manner of fun things come up: astrologies, numerologies, odd dietary and bathroom restrictions(Fun with Leviticus!), geomancy(invent your own Feng Shui, in a fantasy story it could actually work), and funerary customs(go down to the temple to ask grandpa’s pickled head for marital advice? Sure!).  I think I have inklings of a story to go with the title, “Corpse in the Corner…”

Realistically, you don’t have to go that far to make something really different. Look at all the conflict between Christian, Jewish and Islamic cultures. The differences are pretty trivial(at least by the standards of your average socially tone-deaf science fiction writer… like moi), but the conflicts sure ain’t. The burkha? Well, gender-liberalism is a pretty new thing in the West by historical standards, and Taliban is probably a pretty close equivalent to Inbred Hillbilly. Saudi Arabia is what happens when the Westborough Baptist Church makes the laws. Looking at those kind of equivalents can be pretty fertile ground for weird cultural concepts. The parallax view. It’s pretty easy to get seriously dystopic with that.

Here are some reference works I’ve found useful, particularly with developing religious customs and mythologies. (Amazon links)

Also, Bible, Book of Mormon, anything by C.S. Lewis, Bhagavad Gita, and Xenopsychology by Robert A. Freitas(Analog magazine, April 1984 issue. Good luck!). Actually Robert Freitas is a good author to look up, generally.

I’d also add anything by Ursula LeGuin, Jack Vance or Donald Kingsbury(back to those funerary customs: Dad jerky to fortify the heart when facing adversity). Ha! Some of these are much more prolific than others…

Thus, to quote Buffy, endeth the lesson.

Thank you,
The Astrographer

Posted in World Building | Leave a comment

Playing With Blender Cycles

This is just a little something to fill in over our trip. A successful render with Blender Cycles. Musgrave Hetero Terrain noise(cycles nodes), bumpmapped diffuse shader above sealevel and a fairly simple glossy shader below sealevel. All with a hypsometric color ramp gradient. Pretty simple, but I think it’s a very pretty Christmas ornament.

Enjoy!

Enjoy!

Thank you,
The Astrographer

Posted in Planetary Stuff, Science Fiction | Tagged , , , , , , , | Leave a comment

One More Bit About Noise

While I intend to continue posting new versions of planetGenesis as I make(hopefully useful)changes, this will be my last noise post for awhile. Did I just hear applause?  To start with, here is planetgenesis_301a.jar. I’ve added scaling to the Modified Multifractal node. The MMF seems to be properly scaled for all modes so long as the Sensitivity parameter is set to 0.0. So basically a modified monofractal. Still, it’s progress. It’s a fairly minor improvement, though, so I went with version 3.0.1a rather than 3.0.2. There are also some other minor improvements.

I’m really happy with the F4-F3 Planet effect. It makes a nice blocky fractal, with much less pronounced linear features. After generating the “planet” noise in planetGenesis, I loaded the resulting 16-bit PNG into Wilbur.

In Wilbur, after rescaling the elevations for land and sea, I used the exponent filter to give the planet some continental shelves and more interesting mountain ranges. I also added a bit of Incise Flow. Maybe more than a bit. That thing is so slow, that you kind of want to see something when you’re done!

The F4-F3 heteroterrain fractal rescaled and shelved into our planet in Wilbur.

The F4-F3 heteroterrain fractal rescaled and shelved into our planet in Wilbur.

I then reworked the gradients to change the coloring. Under Texture>Shader Setup…, I selected the Altitude tab. To change the Land and Sea gradients to my preferred coloration I clicked on the Color List… button in the appropriate section and then clicked on the Load button in the Edit Color List window and selected the landColors and seaColors files in the F4-F3 Planet folder respectively. The result seen in Wilbur is as shown here…

The map with my own slightly modified color ramp.

The map with my own slightly modified color ramp.

Still in Lighting Settings, I selected the General tab and changed the Display Type from Lighted to Height Code. This gives the hypsometric coloring without the hillshade effect. I will use this in Photoshop to tone down the hillshade in the undersea areas.

A flat version of the hypsometric map without hillshading.

A flat version of the hypsometric map without hillshading.

My third, and for our purposes, last, image will be a seamask. I create this by selecting Texture>Gray Maps>Sea Mask… and selecting an appropriate sea level.

The sea mask to hide the flattening layer over land.

The sea mask to hide the flattening layer over land.

We save that mask image as a PNG Texture and adjourn to Photoshop.

In Photoshop, I open the hillshaded image first. Next, I load the flat image, Select All, Copy, go back to the hillshaded image and Paste. That will produce a new layer, hiding the hillshaded background. Next, we open the sea mask layer, Select All and Copy. Back in the original, formerly hillshaded image, we select the top layer and Add A Layer Mask. Now we go into the Layer Mask Channel and paste the sea mask. Selecting  RGB in channels, we find that the hillshading is visible on land, but hidden under the oceans. Next we reduce the Opacity of the flat sea layer just enough to let some of the undersea hillshading show through to give the seas a little “PIZZazz!”

The result, as I did it, can be seen in the planet1.tif file here(F4-F3 Planet). A web-ready version can be seen below.

The finished product!

The finished product!

As always, manually placed and masked elevation effects, preferably guided by some sort of tectonic model will always be more effective, but I was impressed by the results of the fractalized Voronoi noise and thought I’d share it. Also, most of the styling tips given here will work quite well with handmade elevations. I think next, I will try masking in fractalized F4-F3 noise guided by the results of a good Tectonics.js session. Maybe use that for higher mountains and a less angular Perlin(Simplex) for lower hills and highlands. Hmm… Gotta think how I’d do that.

Thank you,
The Astrographer

Aside | Posted on by | Leave a comment

Repost: The Collapse of a Civilization

or: Big Things Die Hard

So right now I have two draft posts, both of which refuse to come together. One requires me to just sit down and pound away at my notes in a way I just haven’t had time for lately. The other one proved to be enormously more complicated than I’d originally thought. This is typical of my efforts at human geography.

This post is a riff on the second of those. Neither as deep as what I’m working on in the draft, nor as well focussed.

While a lot of what I’ve been thinking about with respect to cultures lately has been based on the concept of a society as a sort of character, with motivations, internal and external conflicts, and the decisions that character makes to resolve those conflicts and support those motivations, this post is more about the mechanics and structures of social events. The social event I am focussing on is the collapse of that society. As a geographer by education and an astrographer by, um, avocation(?), I am interested in how a collapse proceeds and moves through time and space.

I believe, especially in a world with slow communications, the fall of a society is not like a tower of cards, but more like a string of dominoes. Even that simile is inadequate, as in this case the dominoes can pick themselves back up to totter and fall again, knocking down their neighbors, who are also trying to stand themselves up. Also, this would be in two or three dimensions, so the effect might be considered to be more like overdamped waves.

There are two broad models for slow communication: one is trying to maintain a continental or oceanic empire where the fastest means of communication is a letter carried on sailing ship or horseback. Even if we had Concorde jets flitting through the air, the absence of radio or telegraphic communications would render the regions of the world somewhat more isolated. Also, without radio those fast planes would be really dangerous.

Once again, I think I need an example.

A Tale of Four Worlds

Introduction

The Solar Union is a fictional interstellar republic of the future.

While we have a magic FTL drive in this milieu, it has it’s limitations.

The first limitation, which I based on the stutterwarp drive in the 2300AD rpg, is that it can only travel 9 light years between the stars before it has to stop in a fairly strong gravity well for about 32 hours to discharge some effect that it accumulates while travelling at impossibly high speeds. Since FTL is, by definition, kind of magic to start with, I have no real physical explanation for this effect, except to say that by some <doubletalk> phenomenon, the ship loses its contact with real space and time which stresses the drive inordinately and makes its position increasingly indeterminate. In effect, if you go past the 9 light year limit without discharging near a star, your drive could blow up or you could find yourself a billion light years away from where you should be. This has the effect of requiring fairly circuitous routes through space and lots of waystations in otherwise useless locations. Also, sometimes a good pilot can go just a little further. That inspires the occasional hotshot to go a little too far, and bang Lost Human Colonies of the Cretaceous Age 😉 . Maybe.

The second limitation is that while it is impossibly fast, it ain’t that fast relative to the distances it has to travel. The fastest ships can make nine light years in a little less than two days, but these are expensive. Your average tramp freighter might take about a week to travel between two stars of roughly average separation. While the, “Direction,” a shadowy secret society of the alien pNu, is rumored to possess ansibles, for the less fnord among us the fastest means of interstellar communication is by starship.

The Solar Union is a successor to the United Nations. In fact, ships of the Solar Union Fleet still use the UNS-prefix, which stands for United Nations Starship. Although the Solar Union has more power than the old UN and is better able to wield that power, it remains a somewhat loose confederation of the independent nations of Earth. Most of those nations retain their own military forces and some of them still have nuclear weapons. This situation can be somewhat dicey. Many extra-solar colonies were planted by various nations of Earth and others were planted as colonies of the Solar Union as a whole. A few planets have gained their independence and are represented in the SU Assembly as independent nations. Some of these planets had multiple colonies from different nations and aren’t really all that unified in their own right.

Almost all of the colonies, whether national or international in character were not organized as independent, self-sufficient economies. Most of them are fairly dependent on interstellar trade for survival. Particularly waystations in connecting systems without habitable planets. The nations of Earth wanted her children to remain dependent and tied to the apron strings of the mother world. Political power is also very much concentrated on Earth. To some degree this is a natural and reasonable result of the fact that somewhere around half the human race still lives on Earth. Less justly perhaps, most of these colonies are only represented in the Solar Union Assembly by their home nations on Earth, where they don’t necessarily enjoy any real influence regardless of their relative population. Colonies planted by the SU have no real representation at all, though they do have more power over local issues devolved to democratic local institutions. Only a very few worlds are independent nations in their own right, and these are whole planets, often with very diverse political structures being treated as single nations.  The outsystems begin to feel, to some degree rightly, very much exploited. Many of the people of Earth, for their part, feel increasingly like they are being taxed to appease the increasingly ungrateful outsystems, funding for outsystem development programs are accordingly dwindled.

So this is the situation. Difficulties of communication(never good for the maintenance of a polity). The core feels the ingratitude and resentment of outsystem colonies, which they are losing interest in supporting. The outsystem colonies feel exploitation and derision from Earth. A pretty good basis for conflict.

Setting the Stage

By the beginning of the 25th century AD tensions between Earth and many of her colonies were high. In 2468 a long starport workers strike on Beta Comae Berenecis III had spread to several other colonies. When shortages began to be felt on Earth, the response was swift and brutal. The Solar Fleet Marines were sent out to protect thousands of workers that were sent out from Earth to replace the striking workers. Although hundreds of former workers were killed and thousands injured in the ensuing riots and military response on seven worlds, the most lasting harm was in the change that this represented in policy and the creation of a new social division on many worlds.

The policy for dealing with any resistance to Solar Union was now to fire any workers involved and replace them with new workers shipped from Earth. A policy supported, if necessary by military force. Military force usually proved necessary. These new workers represented a new social class. Elevated by fiat from Earth, this new social class, culturally tied to Earth and dissociated from local culture, became a dominant minority in many cases. These, “scabs,” as the Terran replacement workers were often called, typically lived in relatively luxurious gated communities, guarded by armed sentries.

Resentment spread out in ripples from the now unemployed natives as they went out in search of the less skilled and prosperous work now available to them. This period was sometimes referred to as a, “Second Terran Diaspora,” as people with less opportunity for prosperity on Earth went out to become dominant on already well-developed colonies. Continuing colonization of new worlds from Earth had already slowed and more of the dissatisfied people from previous colonies were filling the ships taking colonists out to these few new worlds. Because of this, new colonies were increasingly restive and troublesome. By 2420, Earth ceased planting new colonies altogether. Not until 2448 is another new world, Voltaire, colonized by a small coalition of outworlds. Almost none of the colonists would come from Earth and these would find themselves so discriminated against as to discourage further such emigration. Besides, Terrans had plenty of opportunities taking up the, “Earth Man’s Burden,” in the elder colonies.

Predictably, the Solar Union found itself very busy rooting out conspiracies among outworlders plotting its overthrow, not always successfully as it turned out. Back on Earth, national governments dealing with wave after wave of shortages of outworld goods and paying for the response to restive colonists, were beginning to find the Solar Union increasingly pointless and expensive. Worse, the Solar Union often tied their hands in dealing with problems on their own colonies. Finding Solar Union forces to be ineffective and overly gentle in dealing with a general revolt on their colony on Novaya Rodina, the government of Russia decides to send its own counter-insurgency forces to handle the situation. The SU Assembly votes to order the Russians to stand down their forces after the military effort descends into a series of massive slaughters and occasional orbital bombardment of rebellious population centers. It is a measure of the brutality of the Russian response that they could shock a Solar Union already used to a degree of brutality in such responses. The Solar Union now found itself the target of resistance both from a now genuinely independent Novaya Rodina, and a nuclear-armed Russian Empire, which chose to secede from the Union in 2463.

For the next generation, the situation stabilized into an ugly little, “Cold Revolt,” of terrorism, brushfire wars and backroom plotting. Economically, human space descended into a seemingly permanent cycle of recession, depression, inflation and sudden drastic deflation, occasionally broken by short-lived bubbles that only seemed to enrich a few wealthy speculators.

One group of plotters called themselves the System-States Alliance, a group of outworlders spread across Solar Union space with the goal of overthrowing the Solar Union and putting up a loose coalition of largely independent, freely trading system states. In spite of the wide spread of their operation, they were successful in remaining beneath the radar of Solar Union security forces, and they managed to infiltrate to high levels in the Solar Fleet.

In March of 2484, the System-States Alliance stages its long-planned revolt. The single most successful operation in their initial assault was the attack on the large and vital Fleet yards orbiting Chi Draconis. A handful of ships which were taken by System-States mutineers and a large number of outworld mutineers on the Fleet facilities managed to capture nearly ten percent  of the Solar Fleet in that one operation. In all nearly a third of the Solar Union ships are taken by System-State and sympathetic revolts and mutinies  throughout human space. Some units from national fleets engage SU forces in support of rebellion. The loss of Chi Draconis has cut off the Solar Union altogether from the entire Draconis Arm. Much of the rest of human space remained in disarray.

The Solar Union focusses first on building up the military base at Proxima Centauri to assure Earth’s safety and then sets its sights on regaining control of the rest of human space. Only after regaining control of the rest of human space within 40 light years of Sol, although pockets of resistance remain and terrorism remains rife, does the Solar Fleet set about retaking the Draconis Arm and breaking the back of the Draconian League, which is what the System-States Alliance became isolated on the Draconis Arm. The Battle of Sigma Draconis proved long and painful inspiring strong anti-war, isolationist and anti-SU movements back on Earth. These many movements varied widely from anarchistic to highly authoritarian, from capitalistic to communistic and from nationalistic to globalist and they varied in their particular resistance to the Union, the war and outsystem contact, but they were all in support of one or more of these ideas.

The Draconian League, for its part, was even less unified than Earth and would eventually fall into a mass of independent bickering states. The only unifying theme of the Draconian League that would endure was resistance to Earth and a fanatical hold on Chi Draconis. After Sigma Draconis fell to Union forces, Chi Draconis was attacked several times and actually fell twice. Every time League forces regained the system at the expense of great bloodshed.

With the Solar Union’s failure to regain control of the Draconian Arm and increasing inability to hold on to other worlds in human space, China, Brazil and the Pan-African Union secede from the Solar Union in 2490. Russia supports their new found independence, although it sees it as an opportunity to increase its own influence. Soon after, the Scandinavian Community, long troubled by the violence of Solar Union responses to outworlds intransigence, also secedes.

Fatigued, wounded and disunited the Solar Union agrees to a temporary armistice line between Sigma Draconis and Chi Draconis so that they can try to repair their internal affairs. By 2502, reduced to a shell of its former self, the Solar Union recognizes the independence of the Draconian League which frees the League to collapse into a permanent state of near-chaos.

In 2518 a short nuclear war between the Russo-Chinese Empire and the remnants of the Solar Union over the Kamchatka-Alaska Strip removes Earth from the interstellar community for awhile and balkanizes the planet. The loss of Earth removes the Solar Union as an effective unifying source of any sort and with what’s left of the Draconian League incapable of taking advantage essentially leads to the balkanization of the rest of human space.

Left to their own devices most worlds aren’t capable of building starships. Only a few worlds are capable of diversifying their economies to the point of independently maintaining their technological civilization. The very worlds thus, that are most dependent on interstellar trade are the least capable of maintaining it. Over the next fifty years, as existing starships gradually fall into disrepair, many worlds with overly specialized economies fall to a primitive state. Some even fall to pre-industrial savagery. Worlds that do maintain star travel find that their ships are far too valuable for long excursions into the Wilds where maintenance yards are unavailable and what few ships remain are bent on piracy. The few small interstellar polities remain small and insular.

This is the beginning of a Long Night, not altogether unpunctuated by the occasional point of light.

So now that we have background, we can look at a few specific places: Durandal, Vanguard, Nishapur and Sadwillow. Since this got really long I will post these examples separately.

Posted in History, Science Fiction, World Building | Tagged , , , , , , | Leave a comment