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.



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


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

Domain Distortion


Still working with noise generation on planetGenesis. I found a mistake in my previous effort. I had been assuming that the domain distortion Combiners(Disturb, Warp and Turbulence) worked by sampling the left side noise at coordinates shifted by the noise in the right hand side. I had this backwards as shown here. This was important, as my attempts to control the strength of the domain distortion were doomed…

All of the files referenced here are contained in this zip file.

I have made a few changes to the program itself. Firstly, I’ve changed some of the slider step sizes, as they were inappropriately large. A minor modification, and I am sure there are still some peculiar slider step sizes that need some work. Also, in order to make noises more controllable, especially when they are controlling other functions, I made an attempt to internally scale the basic Perlin and Multifractal noises to a range of (-1, 1). I decided to leave the Modified Multifractal unscaled for now, as determining exactly what the per-octave amplitude is is exceedingly complicated. I seem to have been completely successful with the Perlin node, and somewhat successful with the Multifractal node(the the Ridged and Billowy Perlin and Simplex noise types don’t scale properly. The basic Perlin and Simplex noises and the Sine Wave “noise” all seem to scale well, though, both in Perlin and Multifractal). The Fractallize functions are not yet scaled…

The scaling is reliable(within the limitations specified), no values will be outside of the range (-1,1), but it is not guaranteed, or even terribly likely, to produce values that fill the range between (-1,1). I frequently find output ranges on the order of [-0.3…,0.9…] or [-0.9…,0.3…] or even smaller ranges.

Additive nodes(Add, Subtract, Warp and Turbulence Combiners for example) work well with signed inputs. Multiplicative nodes(Multiply, Divide, Power, Disturb, etc.) often work better with unsigned inputs, (0,1). Except for Musgrave Ridged Fractallize, the Fractallize nodes seem to digest signed and unsigned inputs equally well.

The SignedToUnsigned.pG graph demonstrates a set of nodes that convert a (-1,1) input to a (0,1) output. UnsignedToSigned.pG takes the unsigned output from an SU-like subtree and convert it back to (-1,1). Basically SU(x) = 0.5 * (x+1), and US(x) = 2*x – 1. These are useful tools in predictable graph creation.



The noLatitude.pG graph is an attempt to use the new capabilities of planetGenesis301 and what I have learned to make effective clouds more easily. The cluster of nodes is a domain distortion noise constrained to a (0,1) range. The two Constant Value nodes on the left control the domain distortion. The top node is the strength and the lower node is an offset that may or may not be necessary when using a Disturb node.

There’s also, off disconnected to the right, another experimental Voronoi graph. Never mind that.

The WithLatitude.pG graph uses a Position Y gradient node to control the strength of



the swirling effect with latitude. One thing I’ve observed is that even with predictable inputs it’s very hard to control the frequency of a domain distorted noise. Although this was written with the Bryce program in mind, I think the “phase” section describes the interaction between distorting noise scale, noise scale and strength of distortion pretty well…

I’ll need some time to work out how these interactions work with Warp, Disturb and Turbulence Combiners. In the meantime, thank you for reading.

The Astrographer

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

Repost: Motivations Governing Cultural History

I’m going to gradually go through the best posts of the last six years.

Part of building a world is populating it. Where are the cities? Who are the leaders? What do they speak? What kind of music is playing down in the Market Quarter? Where can I get a good Vilani beer that tastes like old gym socks?

Part of the process of answering these questions is to give your world a history. The cities will have a different character if they were founded by the Sardau tribe across the mountains than if the were founded by the Tlatanga tribe down the river or the Ga Harama riding out of the Great Sand.

History is, itself, a story. The various cultures of a world are as much characters in that story as the heroes and villains in their ancient legends. This post will try to describe one way of building cultures as characters. We need to look at the old cliché of the method actor asking, “What’s my motivation?” I try to differentiate cultures by giving them fairly simple founding motivations in terms of the problems that a culture was created to address. This can explain the conflicts as that society grows and as its set of challenges change. It can also drive the life cycle of a society as those mechanisms intended to address an existing set of challenges becomes increasingly maladapted to new and different challenges. As a hopefully illuminating example of how this works I will use my own very unofficial idea for the Vilani Empire in the science fiction role playing game Traveller.

The Vilani were descended from humans transported to their world by ancient starfaring aliens called, imaginatively, Ancients, presumably as slaves, lab subjects or possibly pets. The planet Vland had life, but it was not biochemically compatible with Earth life. The biochemistry was close enough that they could find nourishment from properly treated local biomass, but it was different enough that local micro-critters couldn’t cope. I’m not sure just how reasonable theses assumptions are, but there are three points of interest that stick out for me.

  • These people have really weak immune systems that haven’t had to cope with significant attacks for many generations. Kind of like the native Americans with smallpox(and syphilis, and…) only more so. These guys haven’t met a bug that didn’t come out of their own gut in ages.
  • They’re also really dependent on a small elite group with specialized knowledge to process their food. Without those shugilii, they starve to death or probably die of poisoning.
  • These Ancients probably planted humans on other worlds(they did) and they may even have transplanted other organisms from Earth on suitable planets. Food plants would be a likely choice, especially since I’m going to assume that the Ancients were fairly compatible biochemically with Earth life(they can eat our food and drink our booze, mmm Amaretto).

So about five thousand years ago, when these guys got off their home planet and started looking around they found a world with Earth life on it, maybe even another clade of humans. What happens? Suddenly back home on Vland people are eating imported peaches and onions and potatoes and corn… and beer that wasn’t produced by fermenting old jock-straps in human waste materials. Yay! The dominant shugilii caste starts to lose its hold on society. Suddenly the alternative to kow-towing to your local chef isn’t starvation, it’s food that likely tastes better than the nutrient mulch that comes out of a shugilii’s cauldron.

This could have been a revolutionary time of innovation and liberalization, two traits not well known in Vilani of later times. Now, the shugilii, while their power is slipping, still have a lot of resources, this becomes important later.

Remember those weak immune systems? Well all of this close contact with the delicious products of an earthlike ecology just about inevitably leads to contact with unfamiliar microbiota. In the canon history, a series of deadly epidemics that ravaged the Vilani Empire after contact and war with Earth was called the Plagues of Duskir. I’m going to assume that this was named after a much earlier Plague of Duskir which precipitated the creation of the Vilani Empire.

By the time these ancient plagues were brought under control, the shugilii were firmly back in control. They blamed the misfortune which befell the Vilani on their libertine actions and their shameful innovation. The psychic trauma of these plagues must have been great as the Vilani remained hidebound and conservative millennia later. I won’t comment on how realistic that timescale might be. The shugilii, although hobbled by a limited understanding of germ-theory, also move to break contact between the Vilani people and all of those bugs on planets with earthlike ecologies, also incidentally(heh-heh) strengthening their hold on the Vilani food supply and thus their power.

So the Vilani Empire is founded with a medical motivation in mind(and shugilii power-politics, of course). The first priority is to quarantine and restrict access to worlds with earthlike biochemistries. The Vilani thus passed by many of the best, most human friendly garden worlds in favor of unpleasant, marginally habitable dumps for fear of disease. Humans found on other worlds would be even more worrisome. I suspect the empire would keep those other humans restrained to their own worlds or tightly defined ghettos in space. By force if necessary. Exploration would have been slow and tentative, but methodical in the early days. No one wants to find more humans out there, carrying awful diseases, but too strong to be forcibly quarantined. Later on, slow and tentative would start to dominate and exploration would become less methodical in a tottering, decadent Empire.

Their dealings with non-human aliens might be much less strained. Once the aliens have passed through a quarantine period and shown not to carry organisms harmful to the Vilani, they might even be admitted freely into Vilani society, depending on their cultural tendencies, of course. Officious, by-the-book Bwaps are everywhere, more creative, incautious or wild-minded aliens might be nearly as restricted as all of those minor humans.

Fear of a reprise of the earlier great plagues prevents the Vilani from the exposure to disease organisms that might make their immune systems more powerful. On the one hand, we know that they suffered under the onslaught of Terran diseases during and after the canonical Interstellar Wars. On the other hand, we also know that a few hundreds of years later, Vilani are common throughout the Third Imperium, but don’t seem to have any particular tendency to fall dead with blood coming out of their eyes on meeting humans from Earth. When the quarantine structures are broken down due to the dual perils of the decay of Imperial authority and hostile action by the enemy Terran Confederation, disease ravages the Empire. Even with reasonable contact with other human races, the variety of disease organisms from the homeworld of the human race would have had unpleasant repercussions but probably less devastating than what they suffered.

Shugilii efforts to restrict innovation as pretty much of a horribly-punished sin, results in an Empire poorly prepared to cope in the face of an active and technologically-advancing enemy.

Going back to that fear of disease, the Vilani response to contact with other humans would lead inevitably to the conflict. The Vilani contacting Earth would be happier talking with Ridley Scott’s Alien over a conference table than representatives from Earth, and it would show. The people of Earth would be less than happy at being cordoned off like lepers in some little corner of space. Other humans weren’t any happier, but contact with Earth was a perfect storm: the Empire was in a state of decay; Earth had been given a lot of time to grow, unfettered by Imperial authority; the humans of post-industrial Earth were just a bit more innovative and advanced than previous humans had been at the time of contact. In combination, this time, the humans could resist quarantine and did.

So the end of the Vilani Empire is predicated by its beginning as much as any classical tragedy.

This same pattern of traumatic problem, particular set of solutions, and failure of that solution set to be adaptable to later problems leading to dissolution, could be applied to the creation of other societies as well. For instance, the Ramshackle Empire in Traveller was predicated on maintaining the gains from the Interstellar Wars and propping up the rotting cadaver of the Vilani Empire, and the Third Imperium was simply created to maintain interstellar trade and stave off a new Long Night.

Basically, try to isolate the motivating trauma, determine the enduring mechanisms created to handle the trauma, then come up with a new set of problems and remove some of the old ones to see how the mechanisms twist, deform and break to adapt and the ways in which those mechanisms fail to adapt.

This isn’t a philosophy of real life, though it does inform my own political viewpoint(Aaah! Politics! Run!), but it is simply intended as one tool in a box of tools for the creation of interesting cultures.

Thank you for your attention,

The Astrographer

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

Clouds and more Voronoi

Fig.1 Balls textured with the six textures shown here. (top row l to r): genesis1, genesis, genesis0. {bottom row l to r): genesis 2, genesis 3a, genesis 3b.

Fig.1 Balls textured with the six textures shown here. (top row l to r): genesis1, genesis, genesis0.
{bottom row l to r): genesis 2, genesis 3a, genesis 3b. With the exception of the upper-left cannonball, all of these would benefit from separate surface(bumpmapped), cloud and atmosphere globes.

So I’ve experimented a bit more with planetGenesis. This time, my main focus has been on another bugaboo of mine after craters: cloud cover. I am very much liking the swirly weather-like effects I have attained so far. Not to say any of this is perfect. As with the cratering experiments, all of this can definitely be considered work-in-progress. Any constructive criticism or recommendations are altogether very welcome! I also experimented around a bit with more Voronoi-based textures.

Ordinary fBm or heterogeneous fractals, usually based on a Perlin noise, are usually sufficient for clouds as seen from the ground or reasonably low altitudes. From orbit or beyond, they tend to look like… fBm or some other fractal noise! I’ve messed with Turbulence, Warp, Disturb and other domain-deforming nodes, but found them difficult to control.

An image of the graph used to generate the noises described today. There are three separate trees and one minor(but significant) modification to one of the trees.

Fig.2 An image of the graph used to generate most of the noises described today(clouds.pG). There are three separate trees and one minor(but significant) modification to one of the trees.

So, I’ve packed up all the files you’ll need to follow along in this zip file. Because planetGenesis lacks a proper system for adding arbitrary labels to graphs(I’m working on giving No Operation nodes user-assigned labels, but so far I’m doing something wrong…). In the absence of that(and probably marginally clearer than my No Op labels), I’m putting up an image of the graph with labels added in Photoshop.

The red line, running from the output of the Musgrave HeteroTerrain on the left to the input of the Terrain node is the source of “genesis clouds”. You’ll note that it is also possible to connect to the output of the Multiply node, but I didn’t think that was an improvement. The green line from the output of the Musgrave Multifractallize node to the Terrain node is associated with “genesis0 clouds” and “genesis 2 clouds”. The difference is that the genesis 2 clouds pass through the Compliment(“1-x”) node before passing into the Disturb node.

The actually connected tree,”genesis 1″(between the middle Musgrave HeteroTerrain

Fig.3 Genesis 1: An appealing, if time-expensive, fractal noise.

Fig.3 Genesis 1: An appealing, if time-expensive, fractal noise. Probably good for a rock texture or coarse, grainy metal.

node and the Terrain node), is really the least important. It is simply an experiment with combining different neighborhoods of the same Voronoi together in a combined additive-multiplicative manner(F9 * F8) + (F5 * F4) with what planetGenesis calls a QuasiEuclidean distance metric. As you can see in the genesis 1 image, It makes an appealing fractal noise, but, although it doesn’t seem all that slow at 1024×512 resolution, with all those Voronoi calculations I doubt it will scale well to higher resolutions. But YMMV.

I found the genesis clouds tree to be the best compromise between usefulness and speed.

Genesis clouds. A low-frequency noise modified by a higher-frequency noise Turbulence and passed into Musgrave HeteroTerrain.

Fig. 4 Genesis clouds. A low-frequency noise modified by a higher-frequency noise Turbulence and passed into Musgrave HeteroTerrain.

As you can see, I’ve experimented with some variations on this. Multiplying the original noise in with the HeteroTerrain node really didn’t make a meaningful difference. And taking directly off of the Turbulence node through the No Op node has proven very unsatisfactory. I think I’m running into a bug, but I can’t run it down… This one makes a very nice swirly atmosphere. Though it could benefit from something to make the swirls more realistically latitude-dependent, it is beginning to loog plausible and it is quite fast. It’s all Perlin Simplex Noise all the way down and not a terribly complicated tree, so I expect it will scale pretty nicely to higher resolutions.

I added in the resulting noise to Photoshop as a layer as-is. I then used a copy of the grayscale noise as a mask for… an okay effect. After massaging the mask a little with a

Fig.5 Genesis 0 clouds. A somewhat slow combination of Perlin noise Disturbed by a Worley Cell Basis fed through an abs function.

Fig.5 Genesis 0 clouds. A somewhat slow combination of Perlin noise Disturbed by a Worley Cell Basis fed through an abs function.

Threshold adjustment and applying a Gaussian Blur filter, I think it got pretty attractive. I added a simple LunarCell planet surface to get an idea how it would look “in situ”.

The next texture,”genesis 0 clouds,” is very slow, even at a mere 1024×512 resolution, and, while attractive, probably not worth so many octaves applied to a Voronoi, so I’m not sure how terribly useful it is. For completeness, I created a surface map as with the previous noise as seen above. I actually like this more, with massaging, than the genesis clouds, but it is so very slooow.

Fig.6 Genesis 2 clouds. Modified by the Complement node, this makes nice puffy clouds. If this weren't so GODAWFUL SLOW, this would be good in combination with G1.

Fig.6 Genesis 2 clouds. Modified by the Complement node, this makes nice puffy clouds. If these weren’t so GODAWFUL SLOW, this would be good in combination with G0.

Next, I simply add in a Complement node between that last Adjust node and the lhs input to the Disturb node.

Looking at it, I think it might pay to try this with a cheaper Perlin basis and fewer preliminary octaves.

I yanked out the wiring for the other noises and replaced the

Fig.n Genesis 3a:

Fig.7 Genesis 3a: Fast version of G0.

Worley Cell Basis in the genesis 0 and genesis 2 clouds. I replaced that with a simple 1 octave clamped Perlin Simplex. I also modify the settings of the last Adjustments

node such that the output has a range of about (0…1).

I’m going to start with the first variant(no Complement). Call it “genesis 3a”. It runs pretty darn quick. Let’s see how it looks. Not terrible…

Fig. 8 Genesis 3b: A faster version of the G2 puffy cloud generator.

Fig. 8 Genesis 3b: A faster version of the G2 puffy cloud generator.

Now to click that Complement in there… Call it”genesis 3b”. Honestly, I still prefer the Voronoi versions, but these are a good stand in for when there’s a time pinch. Or when, you know, you want a reasonably high resolution texture in less time than it takes to sleep off a bad night at the bar…

That’s all for today. Thank you for watching, folks!
The Astrographer

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

The Sharif Won’t Like It

Rock the Casbah!

Rock the Casbah!

I decided to mess about a bit more with Voronoi textures. Mostly, I’ve been focusing on

Buildings on top of buildings…

Buildings on top of buildings…

naturalistic forms, but I did take a look at mechanical or architectural forms with Manhattan and Chebyshev(or Chessboard, as they’re labeled in planetGenesis) distance metrics. Putting a Tileable Worley through a very slightly ramped Range node and a Fractalize function resulted in an interestingly artificial yet chaotic texture that reminded me of a map I once saw of the Casbah district in, I believe, Algiers. Chaotic and mazelike with weird, narrow, dark, wandering alleyways that don’t lead to where you’re going, but(at least in some kind of fantasy game or story) provide lots of opportunities to find adventure or a knife in a dark alley. Or both!

Actually, my first thought upon seeing that was of a wall covered in bas relief alien genesis_wallhieroglyphics, but when I actually rendered it, it looked very much like some dry medieval overgrown city suitable for A Thousand an One Nights. I loaded the image up in Photoshop, converted to 8-bit RGB and placed a Gradient Map Adjustment Layer with a gradient in browns that came with the software.

The image proved very complicated for a Blender modifier. To make it work and not look awful, I had to max out a Subdivision modifier to 6 levels, then add a couple more in a separate modifier. It’s really, really bloody fortunate that I was using a Blender Internal render, because I’m pretty

Not terribly different from the first picture. Just a bit more rounded…

Not terribly different from the first picture. Just a bit less well rounded…

sure I would have died, skeletonized and gotten buried in the dust of ages before completing a Cycles render on my computer. I’m pretty sure Cycles doesn’t like my graphics card and does everything on the CPU! The first time I rendered it, I used a vertical plane to simulate a wall a’la Blood Sands of Lh’O’won, but as soon as I saw it, I knew it was architecture and immediately re-rendered it as a flat horizontal plane. To simplify things, and also so that I didn’t end up with a round plane, I used a Simple subdivision surface rather than a nicely smoothed Catmull-Clark. I wasn’t paying close attention, so I added the last couple of subdivisions with the default Catmull-Clark smoothing. The effect, as shown in the picture at the top of the page, was much smoother and cleaner than the purely Simple subdivision, and the plane remained square as long as the Simple subd was at the top of the modifier stack. After a bit of experimentation, varying the layers of Simple vs. Catmull-Clark subdivisions, I felt I had a pretty good look.

I hope you enjoyed this little aside,
The Astrographer

Aside | Posted on by | Tagged , , , , , , , | Leave a comment

More Noise Generation

A couple of Eric Gehlin planets rendered in Bryce. That lower left planet is a good example of the effect I'd like to replicate.

A couple of Eric Gehlin planets rendered in Bryce. That lower left planet is a good example of the effect I’d like to replicate.

So after a bit of research trying to figure out how to do some things with OSL on Blender, I figured out a few things which may prove to be of use with some other apps. As much as I’d like everybody to read my entire blog, I know some of my readers probably find it a bit long and want to get the goodies. So I’ll post the goodies right here at the start. After playing with the toys a bit, maybe the rest of the post might even make more sense…

Crackle noise: A nice Voronoi F2-F1 noise.

Cratered planet 1: A first effort at using Voronoi to create craters.

Cratered planet 2: Further along with the effort. Use of fractals to increase size variation.

Cratered planet 3: Further along.

Cratered planet 4: Something completely different. Not so far along…

These all require my latest version of planetGenesis3 to run.

A preview image of the Crackle effect.

A preview image of the Crackle effect.

First, I’ve figured out how to make an effect that looks like Blender’s Crackle noise. It turns out to be something also called Voronoi F2-F1 noise, which means that it takes the distance to the nearest randomly placed point in the Voronoi noise space(F1) and subtracts it from the distance to the second nearest point in the Voronoi noise space.

To pull this off, start by right-clicking some blank space and selecting Add Noise>Worley>Biased Worley. Set the Neighbor field on that node to 2 and click Apply. Now, right-click on the node and select Copy. Set the Neighbor field on the new Node to 1 and click Apply. Now right-click on the background again and select Add Combiner>Subtract. Shift click and hold on the bottom “output” socket on the Biased Worley node with Neighbors set to 2. Drag to the top left “input” socket on the Subtract node you just made. Repeat, dragging from the output socket of the Biased Worley node with Neighbors set to 1 to the Subtract node’s right input socket.

If you now right click on the Subtract node and select Preview, you’ll get a 3d view of a jagged, angular landscape. that is a Voronoi F2-F1 Crackle texture being used as a heightfield. Congratulations! You can now click drag from the bottom socket of the Subtract node to the top and only socket on the Terrain node which is the one node on the canvas when PlanetGenesis opened. Right click on the Terrain node, set your Properties as you like. Do you want your texture to be on a spherical planet or a flat Landscape. You can click settings to set the Width and Depth of your texture. For a PNG, this will be the width and height resolution in pixels. For a Planet PNG, you can set the circumference, which will be the width of the resulting equirectangular image in pixels resolution. The height of the image will be half that… Next browse to set a location for the file generated. Next, right click on the Terrain node, select Run, and the program will generate a texture image in the location you selected. Note that the preview imagery is ony a 64×64 sample, so your texture will be much higher frequency. Here is the pG file to look at.

This next one turned into a bit more of a thing. While trying to recover my copy of Bryce after a crash, I came across a set of planet objects created by Eric A. Gehlin on ShareCG including this one. They’re striking, but I’m kind of moving away from Bryce of late.

Examining Mr. Gehlin’s texturing, I noticed that the craters were placed using a basis

DY-90 over a cratered planet.

DY-90 over a cratered planet.

noise called “Spots”. My original intention was to implement this all in Blender Cycles, but doing the previous Crackle effect required a Voronoi noise implemented in OSL, which is still quite slow on Blender. I have high hopes for OSL shaders in the future, once the developers get around to optimizing, but for now OSL is, not quite useless, but worth avoiding if possible. Anyway, a bit of googling showed that a random Spot shader could be implemented by thresholding a straight Voronoi noise. Actually, my idea for the Crackle network above was derived from this research.

I figured if I could create a Spot by setting all points with a Voronoi noise lower than some threshold to white, then I could create a ring by using the Range function that I had created for planetGenesis. Those rings worked perfectly well. To the point that I went a little overboard building up a lunar landscape.

A nice but heavily massaged cratered planet rendered in Blender 2.78a.

A nice but heavily massaged cratered planet rendered in Blender 2.78a.

I started with a Biased Worley noise as the basis for the craters. I set the Neighbor to 1 and the Metric to Euclidean. The other settings will mostly govern the size and number of craters produced. This will produce a grid of distances to randomly distributed points, so with neighbor set to 1, the distances will produce concentric circles. Next I set up a Range node. Set the Value below range to something like -1.0, the Value within range to something like 1.0 and the Value above range to something like 0.0. The idea is that the rim of the crater is raised and the area within the crater is somewhat below the level of the surrounding land. There will be a lot of adjustments down the line, so the exact numbers are not terribly important. I’ve experimented with the Craterize node, but its hard to adjust the size of the craters produced relative to the distance between them. The only available adjustment is the size of the input fractal which directly effects both distance between craters and the size of the craters. The f(x) node shows a lot of promise for spacing and shaping craters, but the adjustments are incredibly niggling. It will be worthy of further study. I added a Modified Multifractal Noise node, ran it through a (0,1) Rough Scale node and used a connected that output and the output of the Range together through a Multiply Combiner node. This is to give the craters a bit of individual shape. In order to make the craters a bit less degraded, I added the output from the Range node back in to the output from the Multiply node through an Add node.

I add another Modified Multifractal noise node. I set the octaves, so it is just outputting the raw noise basis function. I run this into a Musgrave Hetero Fractallize function node. This creates a simple underlying terrain. Compare the Approximate Range of the Musgrave Heteroterrain node to the crater Add node by hovering the mouse over each of the nodes in turn. Now add an Offset or Adjustments node to the craters’ Add node. Set the Scale so that the underlying terrain does not overwhelm the craters, but the terrain remains interesting. I set the Scale to 25 in the example graph which may have been a bit too much. Adjust to taste.

I want to create some central ridges for some of the larger craters so I connect another Range node back to the original crater-generating Biased Worley noise node. I set the Upper End to something very low in order to make small raised points. I set the Value within range and the Value below range to the same value. Something high enough to be visible in some craters. It might even pay to set the Value below range even higher to make the central ridges pointier and more pronounced. Use an Add Combiner node to connect the craters and terrain to this new central ridges subtree.

In later iterations of the development process, I used a lower frequency Worley noise and a Musgrave Hybrid Fractallize node to add more interest to the craters. The effect was visually spectacular, but it lost some fidelity in simulating accurate elevations of a cratered world. These experiments are ongoing, including the creation of a Special Fractalize function node that didn’t work quite the way I’d hoped. We may come to this later after much twiddling and coding…

The Cratered planet 4 graph represents a departure in the method. Rather than trying to form rings with the Range node, who’s ramp seems to be broken on the Outside of range side, I decided to make big diffuse lumps which are increased in number and variety by a Fractallize node and subtract out similarly-sized but less diffuse lumps which are also enhanced with a Fractallize node with the same settings. The effect is visually effective and appears to produce a fairly convincing heightfield. We may come back to this as well.

I also have some work I’ve done trying to replicate the Terragen Alpine fractal node with pG and Blender and I’m working to improve the fractals in pG to produce strictly scaled outputs, which should aid immensely in choosing settings. I’ll save all of this for one or more future posts as this one has gotten very long and verbose.

So, for now, thank you for your attention and I hope it was at least as enjoyable and helpful to my readers as it was to me.

The Astrographer

Not too much of the terrain, but a spaceship picture that rather reminds me of a Vincent DiFate picture.

Not too much of the terrain, but a spaceship picture that rather reminds me of a Vincent DiFate picture.

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

Terrain Generation Research

Today’s post will just be a quick collection of links to interesting articles on generating and creating synthetic terrains. My goal is to create interesting and reasonably plausible designed landscapes.

Terrainosaurus: Realistic Terrain Synthesis Using Genetic Algorithms – Genetic synthesis of a terrain based on user-entered constraints and DEM heightfield patches. Seems to be based more on assigning qualitative regions than a ridges and valleys approach.

Interactive GPU-based Procedural Heightfield Brushes – The most basic operations seem to be possible to approximate by painting onto alpha maps of layers generated using appropriate(preferably fairly homogeneous) procedural noise functions. I’d like to try adapting the erosive noise algorithm to planetGenesis(I’d recommend compiling from source. The latest available release is ancient). The one thing I don’t think I can approximate with a noise layer is the directional noise, stretched in a direction based on the direction of the stroke. I’d really like to see that implemented!

River and Coastal Action in Automatic Terrain Generation – There’s quite a lot here. First of all, it has an interesting user-guided system for placing geological features to create a terrain. These features are mountain ranges, valleys, canyons, buttes, cliffs and what it calls periodic hills. Lakes are generated automatically, based on basins in the resulting heightfield. Once the initial terrain is generated, it uses a very simplified model to place precipitation which guides the placement of river seeds. From these, it can generate rivers with varying width, meanders in flatter areas and a delta at the mouth. On the sea coast, this system can generate plausible beaches and headland cliffs. Overall pretty nice, although the terrains are detailed using the somewhat artifacty midpoint subdivision algorithm.

Modeling of ecosystems as a data source for real-time terrain rendering – An ecotope model for placing vegetation. Depending on the needed level of detail, this can do anything from shading for aerial or satellite photography to guiding actual placement of trees, bushes and ground cover shading on closer pictures. It also looks like it could be adapted to creating fairly simple global habitat modeling.

Modeling Landscapes With Ridges and Rivers: A Bottom-up Approach – The described model seems to be a fully automated system for generating a random terrain, but it looks like the ridges-and-valleys approach could be adapted to generate a terrain based on user-generated river and ridge networks. Actually, it looks like a skeleton DEM can be used to guide the process…

Fast, Realistic Terrain Synthesis – Promising. I haven’t gotten a real good look at it, but it looks like a detailed survey of automated patch-based terrain generation.

I hope this will prove useful or at least interesting. Thank you for your attention,
The Astrographer

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

Interlude: tectonics.js

The other day while testing tectonics.js in the background, I found a result I rather liked. I was intending to use tectonics.js to create the basic continental arrangement for my habitable planet orbiting 40 Eridani as part of an incredibly long project I’m working on. I found out in the process that the latest version of tectonics.js no longer works on my computer.

Apple stopped coming out with updates for Safari compatible with my computer at least one age ago, so apparently some of the newer features of javascript aren’t implemented. I have a fairly recent version of Firefox, but it hates my GPU. Chrome never ran tectonics.js on my computer, so that was right out. Thus, I had to dig through the git registry for rtectonics.js that worked on my computer and had the Texture projection feature. Took awhile, but I found a version that worked fine. To test the quality of its rendering, I set it on a very slow increment rate(theoretically about 0.005 MYr/sec). The slower the render speed, usually, the better the look of the render. I think I may have reached a point of diminishing returns:/.

The result I found, when I checked it in the morning was rather interesting. I don’t know if I will use it for the 40 Eridani project, but I am keeping it for later use.

The Satellite View shader of tectonics.js gives a good idea of the rough biome of regions. It's sensitive to temperature, precipitation and altitude.

The Satellite View shader of tectonics.js gives a good idea of the rough biome of regions. It’s sensitive to temperature, precipitation and altitude.

I did think I would show it off, here, though. I can go show the images I have generated, and go over the features that appealed to me particularly.

The first thing that I noticed about this map was that it vaguely reminded me of the map of Tschai from the Planet of Adventure books by Jack Vance.

In retrospect, the similarity was only very vague.

In retrospect, the similarity was only very vague.

You have to squint really hard to see the similarity. It also probably wouldn’t hurt to have a nut or two loose in your brain case like me!

Kotan is a bit soft pedaled. Kislovan and Haulk are a bit hulking. Charchan is kind of there(…). That island in the Draschade Ocean seems to have wandered a bit eastward, or maybe Vord fell to the south.

Okay. It’s not that close a resemblance, but it’s about as good as you could hope to come up at random.

The image marked up with approximations of features from Tschai. Some are more fanciful than others…

The image marked up with approximations of features from Tschai. Some are more fanciful than others…

Anyway, with a similar exercise of the imagination, you could see bits of Earth in this map as well. This is a bit less literal than my effort with Tschai, although squinting and loose fasteners are similarly useful.

That island in the south east quadrant brings New Zealand to my mind. Isolated, temperate and perhaps a touch exotic. The temperate arc in the north east quarter looks like it could have an interesting Europe-like feel to it. Along the coast you go from the edge of a desert to something vaguely like Iberia. Further up the arch, you pass through regions similar to

If you thought Tschai was forced, take a gander at this attempt to place bits of an Earth map on the image.

If you thought Tschai was forced, take a gander at this attempt to place bits of an Earth map on the image.

France and perhaps Germany. Across a small gulf, you find Scandinavia or maybe a more continental Britain. Inland, to the north and west, you segue into possible steppelands, like Russia. If you head south to the upside-down tee-shaped peninsula, you find desert and tropical jungles like a diminutive Africa of sorts. This arrangement, with its pocket-sized tropical regions makes me think even more strongly of the World of Greyhawk. As you can see, the more specific we get, the more forced the comparisons become. This is all for the good. If we wanted to play on Earth, there are plenty of very good maps of that planet.

I would also want to add further points of oddness to the world as I detailed it. Strange flora and fauna. Unearthly environments. Earth itself has plenty of those, why shouldn’t this world?

Anyway, I thought this might be an interesting exercise in trying to visualize a world by looking at a fairly random map. “Fairly” random, because this is based on an attempt to model the tectonic processes that might be found in a real planet similar to Earth.

For added enjoyment. Hopefully. I’ve added some additional generated maps.

This is the "Bedrock" shader. For purposes of visualizing elevations, I think it gives a better feel for the variation in lower and flatter areas. Sadly, I wasn't able to save an elevation map before Safari crashed on me. My computer makes me sad… LOL

This is the “Bedrock” shader. For purposes of visualizing elevations, I think it gives a better feel for the variation in lower and flatter areas. Sadly, I wasn’t able to save an elevation map before Safari crashed on me. My computer makes me sad… LOL

This is the vegetation shader. It also gives a good idea of the ratio of evaporation to precipitation. Because insolation is an altogether positive effect in the algorithm used to generate this, that breaks down in the upper latitudes. One can figure on more snowfall in the upper reaches…

This is the vegetation shader. It also gives a good idea of the ratio of evaporation to precipitation. Because insolation is an altogether positive effect in the algorithm used to generate this, that breaks down in the upper latitudes. One can figure on more snowfall in the upper reaches…

Comments and suggestions are always welcome. Criticisms might be appreciated…

Thank you for your attention.
The Astrographer

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