Fugue Devlog 9: More Natural Environments and Better Player Control

04.25.2021

As I mentioned in the last devlog, I implemented a two viewport system: one viewport for the half-resolution 3d rendering and then a second main (the root) viewport to render the UI and scale up the 3d output. One problem: shadows weren't rendering anymore. This was easy to fix; by default new viewports don't have a shadow atlas, so I just had to change that value from 0 to 1.

I also continued work on the outdoor/natural environment scenes, which brought up some more issues. The forest clearing scene dropped in performance (down to 11-15fps) once more trees were added, which I kind of expected. I reduced the tree model to about 330 vertices (from ~1.2k), which probably helped a little, but was less impactful than I'd hoped. I ended up playing around with the root viewport settings (which confusingly are mixed into Project Settings > General). By default the root viewport is set to render 3d, but now it's only rendering the 2d image it's passed by the half-resolution viewport. So I set the root viewport's render mode to 2d (under Project Settings > General > Intended Usage) and that boosted the scene to around 24-30fps. Still not the greatest, but fine for now.

I also wanted to set up a baked lightmap for ambient occlusion, but there's a bug where environmental lighting isn't taken into account (a fix should be out in 3.3.1).

I also put together a cave/grotto scene, which went quickly:

I realized the cave and forest clearing scenes are actually closer to indoor scenes: there's no skybox or distant environment to render. So I started playing around with a proper outdoor environment, where the sky is visible and there's distant geometry to handle:

A lot of new things to consider here. One, which is mostly specific to this particular scene, is grass and wind effects. I have a lot of grass here...I want to evoke that wind-sweeping-through-the-grass effect that comes up in a lot of Ghibli films. Of course this is a performance hit, with the scene rendering at 10-15fps.

A real-life example

If you look at the effect in Ghibli films, it's actually very simple. The grass is just a static image with trails moving on top:

From The Wind Rises

So I don't really need actual grass geometry for the effect to look good. I can probably put together some kind of shader that moves these trails over the surface of a static texture.

The other thing I'm not sure about is what to render as a skybox and what to render as in-game terrain. I'm using the HTerrain plugin to generate terrain and in the image above all the terrain is in-game. It's really lacking in detail/richness which is mostly because I'm only using one texture. I'm thinking I should probably only render the foreground as in-game geometry and everything else as skybox for performance's sake. Which means I need to figure out a workflow for modeling and exporting skyboxes from Blender. This is something I'll have to think on more, I'm really not sure how best to approach this.

A few other updates:

  • Set up a test character and started giving character animations a try, which I was dreading (I still am, but less so). The whole process was made way easier with Mixamo—this will sound like an ad, but it has an auto-rigger that makes a rigging a character very easy and their library of free motion-capture animations covers a lot of what I need right now. For the character itself I based a mesh off of Kiros from FF8 an am using a texture someone extracted from the game.
    • It's very helpful to have a character for scale. The scale of the indoor test environment, for example, was way too huge.
    • I spent quite a long time tweaking the third-person controls, eventually settling on a system that doesn't use the mouse. Basically, with the default keybindings of WASD: W moves the character forward in whatever direction they're facing, S moves the character backwards (i.e. they literally walk/job backwards), and A/D turns them to their left or right respectively. So far it feels smooth and intuitive.
  • Formalized the "scene" system a bit more. I implemented a node type called Scene which contains information like fixed camera configurations and where the player spawns. This is really simple at the moment, but I imagine it'll be more complicated as I need to switch between cameras in a scene, or track the player for certain segments, and so on.

Fugue Devlog 8: Testing Outdoor Environments and Performance

04.23.2021

I started experimenting with an outdoor environment to start trying out the various environmental effects and elements I looked into last week.

There were a few small victories: the Waterways add-on worked great for still pools by setting both Flow > Distance and Flow > Pressure to 0. I also found an off-the-shelf cloud shader that looks great. With these elements and the ones from last week the outdoor environment looked dreamy:

But the experience raised an important issue that I kind of hoped I would avoid: performance. The outdoor scene was very choppy. I originally had the ~6.6k vertices trees so I tried simplifying them down to about ~1.2k or so. It didn't seem to help much. After reading up on 3d game optimization, the vertex/triangle count was not as important as I thought.

It's possible that some slowdown is due to Godot, which isn't as optimized as more mature 3d game engines (for example, it lacks occlusion culling, which is when objects blocked/hidden by other objects are discarded). It sounds like major 3d improvements have been pushed to the 4.0 release, which may not happen for awhile.

My GPU (or rather my lack of a dedicated one) is no doubt a major bottleneck here, but I want this game to play well on integrated graphics. I'm going with the low-res textures and low-poly models not only for style reasons but also for performance. I thought that would go a long way in terms of performance, but I was completely wrong. They are important, but not nearly as important as light and shadows.

After some more reading and testing of my own:

  • Shadows have a huge effect. Turning off ambient occlusion for the world environment helps a lot and using simpler shadows helps a bit more. Glow doesn't seem to affect FPS that much.
  • Mesh amount and complexity still have an impact. Having a lot (~100) of the 1.2k vertices trees did slow things down a lot, if only because they make light/shadows more complicated.
  • The wind shader, on the other hand, didn't seem to affect performance much compared to a regular spatial shader. Though it does require dynamic shadows to work; otherwise I could probably bake those shadows.
  • The cloud shader also has a pretty substantial impact (10-15fps). Tweaking its settings to do fewer draw passes did help a little. I also tried porting another cloud shader, but that performed even worse and was a hassle to set up.

Throughout this testing I thought this was just an issue with the outdoor scene (with the high number of moving trees, especially), but the indoor test scene also had an FPS of only about 10-11. Turning off ambient occlusion, however, boosted that to around 30fps. I guess I completely underestimated how demanding ambient occlusion is.

Specifically, I'm using Godot's screen-space ambient occlusion (SSAO), which adds a lot of richness to the environment. But it's hard to justify such a massive drop in FPS. Fortunately, the screen shader effect kind of maintains some visual interestingness on its own.

I still wanted to preserve some AO if possible. Baking lightmaps is the usual approach and wasn't too complicated to get set up in Godot. The baked lighting does looks better than having no SSAO, and I get around 30fps consistently—basically same performance as without the baked lightmap. But the baked lightmaps don't look as good as the SSAO. According to the docs SSAO is a different approach that captures details in smaller geometries. But after digging a bit, it seems the main difference is that SSAO has a "Light Affect" parameter that controls the visibility of AO in direct light. Normally it's not visible in direct light, i.e. "Light Affect" is 0, but I set it to 1 to exaggerate corners with deeper shadows. This isn't an option for the AO produced by baking lightmaps.

So I tried another route. The screen shader effect I'm using already simulates half resolution for more pixel texture; it makes sense to just actually render at half resolution and draw fewer pixels in the first place. Below are a few comparisons:

1x resolution, with a screen shader that simulates 0.5x res. Runs at about 20-22 FPS

0.5x resolution, with a screen shader that simulates (an additional) 0.5x res. Runs at about 48-54 FPS

0.5x resolution, without a screen shader further downscaling. Runs at about 54-60 FPS

1x resolution, with a screen shader that simulates 0.5x res and SSAO enabled. Runs at about 15-18 FPS

0.5x resolution, with a screen shader that simulates (an additional) 0.5x res and SSAO enabled. Runs at about 50-60 FPS

0.5x resolution, without a screen shader further downscaling and SSAO enabled. Runs at about 40-44 FPS

The outdoor scene looks good under all settings. But I imagine the double downscaling looks worse as there are more objects on the screen. That's the case with the indoor scene, which looks too noisy with the double downscaling. But otherwise the FPS gains are very promising and give me enough space to switch SSAO back on for the indoor scene!

One issue here is that this downscales the entire viewport, so the text is also downscaled. Text should probably render at the highest resolution possible for readability. So instead I need to render the player camera to a separate downscaled viewport and then render the non-downscaled resolution text (and other UI elements) on top. This was surprisingly complicated to set up; at least, the way Godot's viewports and scene tree work isn't intuitive to me. I struggled to find a way to specify what node loaded scenes attach to so that I could automatically attach scenes to my downscaled viewport node. But that doesn't seem possible—instead I have my player camera as a child of this downscaled viewport node and let scenes attach to the scene tree normally. The "Main" scene that contains all of this is instantiated as a singleton (i.e. using autoload).

This is the route I'll go with for now. The look of the game is pretty much the same, and I can use SSAO for indoor scenes and maintain high framerates. Similarly, the outdoor scene can use the cloud shader and maintain high framerates. That will likely change though as one tree is obviously an unrealistically simple scene. I need to keep experimenting with simpler trees and laying out the scene differently so I don't actually have to have a small forest's worth of trees. My hope is that with this set up the marginal cost of additional meshes will be pretty small. Not small enough for an entire forest, but small enough that I won't have to worry much about performance again.

A related question is the player camera. Right now the player has free reign over it, and the dialogue system was designed with that in mind. However when I imagine the game being played I see a fixed camera setup. The benefit with that is the player is way more constrained in what they see, so I can be more minimal in scene dressing and maintain better performance that way. For example, I'd only need to seat a few trees at the edge of the camera's view rather than anywhere the player might possibly look.

Fixed camera example

This was just a quick test to see how it might work. To really see if this is the right approach I should start figuring out the character design more and flesh out the third-person system in general. So I'll probably tackle that next before prototyping more of the outdoor/natural environments.


Log: 4/23/2021

04.23.2021
log

This week: Had a busy week so a little light...but: junk, ice cream machines, colonialism in the core, emotional intelligence, smallholder yields, and custom Magic: The Gathering sets.

Unwanted Corkpull, Kelly Pendergrast.

A good run through of many of my own anxieties wrt to physical products.

My parents mentioned that they'll need help to start cleaning out the house; on the one hand I'm excited about the nostalgia of going through old books and whatnot I had as a kid but dreading the inevitable pile of unwanted things that needs expedient disposal and forgetting. There's no comforting illusion of recycling or donation, considering that nine times out of ten recycling is effectively landfilling and the fraction of junk that was at one point functional (i.e. not packaging, or memorabilia, and so on) will be in disrepair or obsolete.

The author mentions Robin Nagle, I recommend her book Picking Up. Sanitation is one of the most dangerous jobs, in large part due to the horrendous shit that makes up what we make. Bits that become projectiles in the hopper and toxic sludge spewing out of bags that can kill. And of course the sheer amount of waste that circulates. As pointed out in the article, disposability— along with debt and privatization—is an important strategy for maintaining demand, creating a unending vacuum that pulls products throughout the economy.

Like the author I sometimes fantasize about tools that are well-made, long-lasting, repairable, and excel in their function. There's a subreddit for those products, r/BuyItForLife, although I think there's often conflict over whether or not the sub has lost sight of its original purpose, with people posting things that, in fact, do not last for particularly long (the gold standard seems to be things that are passed down through generations and still in good condition), and there's also the side that the sub drives purchases/is probably a target for advertisers, though mitigating consumption isn't one of its stated goals. And funnily, there are often posts of people complaining that they can't buy anything that's posted on the subreddit, because a lot of these durable products aren't produced anymore.

I hold the corkpull, and I think of the prehistory of its materials extracted from the ground, the chemical manufacturing to form the plastic compounds, the digital piecework of design logistics, marketing, the molding and unfolding and packaging and shipping and handling and retail. It’s such a weight to hold in my hand. The hours aren’t love hours, necessarily — rather chemical hours and deep-time sedimentary hours, pain hours and R&D hours. More hours than I can ever repay.

I think of the other extreme here, of preppers and survivalists and homesteaders and so on who in some sense are desperately trying to escape this bond to global supply chains and waste. I get the draw, but I don't know if you can ever fully escape that pull.

'Colonialism had never really ended': my life in the shadow of Cecil Rhodes, Simukai Chigudu

This was fantastic. I don't have much to add except that I recommend and that it's another angle on the very complicated, challenging, and inescapable tension of needing to play by the rules of oppressive systems to "succeed" enough that you gain some footing to shift them, and the inevitability that playing by those rules leaves its mark on you—marks that you spend years reckoning with and undoing.

Reading throughout I was reminded of my own family history and the relatively little I know from when I've worked up the courage to ask my parents about it. I grew up in the US so there is a generational gulf between me and my family history in China, but not as much as I'd have originally thought. My grandparents consisted of two doctors, a scientist, and a social work, and all had some connection to the US: one had studied in the US, the others were among the first Chinese doctors to work at a western hospital funded by a Rockefeller. My father, who continue this short tradition of western medicine in my family, interestingly grew way more interested in traditional Chinese medicine over the last decade.

Chigudu's necessarily nuanced relationship Mugabe and Zimbabwe independence and the warped binary positions people distant from the country take also reminded me of the internet and media discourse around China. Now is obviously a sensitive time with anti-Asian sentiment rising and continued tensions between the US and China, but it's still extremely common to see positions that are (and I don't think this is really an exaggeration) "China bad" or "China good". People who live in America no doubt have complex feelings about the country because it encompasses so many different things. China is just as complex, but countries outside your own, that you have no connection to, are only ever invoked as a symbol and never as a place.

As someone active in online leftist spaces I come across pro-Mao/pro-China rhetoric very often and am never really sure how to deal with it. My family and their friends were persecuted under Mao as intellectuals; being associated with a western hospital didn't help. It's really hard for me to see how that could have been justified. This is winding away from the original piece so I'll stop here, but maybe I'll write more on this at another time.

They Hacked McDonald’s Ice Cream Machines—and Started a Cold War, Andy Greenberg

Interesting story about the McDonald's ice cream machines that are constantly out-of-service and how a couple, after building a device that made independent maintenance of the machines easier for franchises, came under the fire of McDonald's itself. I recently gave a talk titled "Autonomy vs Automation" themed around asking whether or not a technology enhances autonomy or encourages automation, by which I mean "makes decisions on our behalf", whether or not we realize it. Many new technologies impose some kind of asymmetric relation on its users, whether that is a draconian EULA or a excessive ToS or the cyclic dependency of GMO/fertilizer/pesticide the agrochemical industry entails. The piece described how Taylor, the company behind the notorious ice cream machines, makes independent maintenance of the machines difficult in part because they benefit from lucrative maintenance contracts. You can probably guess where the story goes: McDonald's/Taylor crackdown and Taylor, seeing the interest in the couple's device, make their own copy of it. I can't say I have any emotional investment in any of the parties involved but it was an entertaining read.

It reminds me of the "f'real" shake machines at Wawa—not quite the same as froyo but iirc the approach there is to have the ice cream in a separate container and refrigeration unit, and the machine just does the mixing. Seems way less complicated but I don't know if the same approach would work for froyo.

The Repressive Politics of Emotional Intelligence, Merve Emre

Another entertaining read, where about 3/4 of the way through I realized that "emotional intelligence" as a self-disciplining framework for life under capitalism sounds an awful lot like Confucianism, at least The Analects, which I have to admit is the only Confucian text I've read. The harshest reading of The Analects is that Confucius is basically doing what the author here is criticizing Goleman for—a kind of conservatism with regards to maintaining harmonious but rather regressive relationships and an implication of personal failure if strife occurs in them. Whereas Goleman developed another naturalizing sleight of hand for individualizing the burden of capitalism and disciplining its subjects, Confucius I guess was doing similarly for the state? I don't want to stretch this comparison too far, it was just a briefly striking similarity.

Higher yields and more biodiversity on smaller farms, Vincent Ricciardi, Zia Mehrabi, Hannah Wittman, Dana James & Navin Ramankutty

A promising meta-analysis that finds greater yields and (crop and non-crop) biodiversity with smaller farms. This is a very controversial topic (consider this recent big ag shill piece) and when I read more about it while researching fertilizer I couldn't find anything conclusive. There is just so much variety to contend with—different crops, environments/climactic conditions, unusual weather patterns, variability in crop treatment, soil quality, local socioeconomic conditions, and so on—that it's hard to generalize the outcome of any study (or even set of studies!). But at least this study is more evidence on the side of smallholders. Interestingly, they weren't able to find anything conclusive on GHG emissions and resource efficiency, which, along with crop yields, are the major points of contention in the big-vs-small ag debate. The article hints at labor being a main factor here, which I guess is not all that surprising.

PlaneSculptors

From the "Goliaths of Nangjiao" set

This is an incredible site of custom Magic: The Gathering sets. The quality and creativity of the set and card designs are impressive—I hope to try one of them out at some point. I'm pretty sure some official cards and sets have lifted ideas from this site...which is something I've wondered about. There have been accusations of Wizards of the Coast stealing ideas from fan designs.



Fugue Devlog 7: Environmental Effects and Objects

04.18.2021

A tree

With the dialogue system in decent shape, I'm moving onto exterior environments. There's a lot to figure out here: environmental effects like wind, fire, smoke, rain, and snow; terrain design; rocks; vegetation including grass, bushes, and trees; skyboxes; and water (which I'm categorizing into "still" water, like those in ponds and pools, and "active" water, like that of the sea). In general creating "natural" effects and objects is way harder than human-made interiors and objects!

Several of the effects (rain, snow, fire, smoke) can be implemented as particle systems. I played around with Godot's Particles node and am pretty happy with the results. Here are a couple demos showing falling leaves and petals:

Falling leaves using a particle system

Falling petals using a particle system

The only thing that doesn't seem possible is the leaves rotating along the x/z axes. It's not a huge deal since these are more of mood-setting elements and there'll be plenty else on the screen to focus on.

Many of the remaining effects are usually implemented with shaders: wind in grass and trees (this tree wind shader works pretty well), the grass itself, and water. I don't have much experience with shaders so I spent some time learning more about them and playing around with them. I haven't yet managed to finish anything substantial yet but will keep exploring there.

In terms of skyboxes, those seem not too difficult to implement in Blender: basically you build your skybox and then export it as a panoramic image into Godot.

Terrain, rocks, water, and vegetation are a lot harder. For terrain and water there are fortunately some Godot plugins available that make it much easier. For terrain, there's Zylann's HTerrain plugin for heightmap-based terrains. This works well for outdoor natural environments and it supports some things out of the box, like painting grass textures and basic wind for grass. Unfortunately the heightmap-based approach doesn't work for things like caves and overhangs, so it's not a panacea.

For caves and overhangs there's Zylann's VoxelTerrain plugin for voxel-based terrains. It's not as mature as HTerrain (lacks a few of its key features, like LOD and grass painting) and it requires compilation into Godot (i.e. not just an addon you can drop in), so I'm not sure if this is exactly what I want to use.

Alternatively, I could create the terrains in Blender using the sculpting and texture painting tools there and import them into Godot. Caves aren't too difficult in Blender (you can use a cube and some displace modifiers to create the right rocky walls as a starting point) so maybe this is the way to go.

For rivers there's Arnklit's Waterways. I wonder if I can stretch it to work for other bodies of water. In any case I may need something different for still bodies of water, like those in grottos:

A grotto

For trees, there were two plugins for Blender I looked at: tree-gen and modular-tree. I also looked at hand-making trees based on "How to Create a Low Poly Tree in 1 Minute" (a similar technique, mainly using Blender's particle system for leaves/small branches, came up in a few other videos). The generated tree-gen mesh has almost 1.3 million vertices which is way too many. In comparison the basic tree generated by modular-tree has about 21k vertices1 and the handmade low-poly tree has only 6.6k vertices. That might still be too many—I don't yet have an intuition of what number I should aim for, I just know that fewer vertices are better in my case. The low-poly one also better matches the look of the game so far (low-poly, photo-realistic textures, and dithering, which in this case is just an artifact of Blender).

tree-gen example

modular-tree example

Low poly example based on "How to Create a Low Poly Tree in 1 Minute"

I wrote a Blender addon that generates the base of the tree (trunk and branches, but without the leaves) in a manner similar to that low-poly tutorial. You still need to manually set up the vertices and particle system for the leaves, but I may expand the script to do some of that automatically. It was a struggle to get the script working properly (my linear algebra is really rusty and the Blender Python documentation, at least for the bmesh parts, is really lacking), and it's not nearly as powerful as tree-gen or modular-tree, but it does what I need and in the style suitable for the game.

Here's the tree with this basic wind shader:

Tree with wind

With trees and other vegetation, as well as rocks, you need not only to create the tree meshes, but also distribute them. This post details the use of a particle system to distribute vegetation throughout a terrain, but Zylann has yet another (!) plugin, Scatter3d, that lets you paint scene instances (e.g. meshes) in Godot. For wind, Godot has a tutorial for a wind shader.

For rocks, Blender has an add-on to generate rocks, which as far as I can tell is based around feeding noise into a displacement modifier (this is the basic approach for creating caves in Blender as well). I've also seen rocks generated with a particle shader, which probably makes more sense if you have a desert landscape that needs tons of small rocks scattered about. If I've learned anything while researching how to approach these natural elements, it's that a rock is not a rock, and water is not water, and so on...there are rocks that are big, for up-close use, or medium-sized ones for foreground elements, or tiny ones for a sprawling landscape; water in a calm pool is not the same as water running through a river which is not the same as water that's crashing against a beach.

A tricky thing with natural elements is the right amount of realism. There's of course a lot of effort spent on figuring out ways to most accurately simulate natural environments and effects, and realism usually comes with a big cost to performance. I'm not trying to make natural environments that approach reality but that are interesting and convincing enough. Whenever I come across a video or post detailing how to make a tree or a water shader or what not, I always have to figure out the context. Is these for rendering in a 3d short film? Is this for a triple-A video game where players are assumed to have the latest graphics cards? Is this a demo of how realistic you can get an effect but way too computationally demanding for practical use?

For example, I found this beautiful Breath of the Wild style grass created using a shader. It's a bit resource intensive and, as wonderful as it looks, it's just not the vibe Fugue's going for.

Next I need to pull these pieces together and try building a couple natural environments—probably a forest clearing and a grotto to start.


  1. It was a little tricky to set up modular-tree. One note is to checkout the blender_28 branch if you're using Blender 2.8 or above. The other is that there's a bug when adding a twig node. What worked for me is to first add a twig node and "execute" the node, creating a mesh called tree, then rename the mesh to twig (or whatever else). Then set up the tree nodes: a trunk node into a branch node, then a "tree parameters" node separately. Check create_leafs, then click the eyedropper for the leaf parameter and select your twig mesh in the scene hierarchy. Then click execute tree


Log: 4/16/2021

04.16.2021
log

This week: post-growth bicycle manufacturing, a Daoist "Cultivation Simulator" (!!), and the end of development (and growth?).

Material challenges of bicycle manufacturing in a post-growth world, Philippe Gauthier

An exercise in thinking through how exactly bikes—an industrial product that is probably essential in most visions of a sustainable/degrowth—would be produced in such a post-growth world. It's an interesting thought exercise in that bicycles are close to an ideal technology, but complicated in important ways. They are mechanically straightforward with relatively few parts, especially compared to many of the other devices, but are still composed of technically-complex materials. They are relatively easy to repair and long-lasting, so production doesn't need to be non-stop—achieving bicycle "saturation" among a population is possible (if you consider the existing stock of bicycles, we might have already achieved saturation)—but maintenance still requires products like chain grease, bike pumps, and tools. There's relatively little variance among bicycles: aside from differences for bodies like frame sizes and seat shapes and maybe some alterations for different environments like types of tires, bicycles are more similar than they are different.

A lot of questions come up when thinking through this. Nowadays bicycles vary tremendously in price range, with cheap ones made of bad steel and extraordinary expensive ones made of more exotic materials like carbon fiber. What materials provide the best trade-offs for price, energy intensity, resource requirements, production complexity, and so on? What scale of production makes the most sense (maybe regional factories)? Will there be regional variances in bicycle production because of resource availability (maybe wood instead of steel or aluminum)? How is waste like popped inner tubes handled? Do we have specialist bicycle manufacturers or are is their production more on-demand at generalist facilities?

I would love to read more deep dives like this!

The End of Development , Tim Barker

Are we coming to the end of growth? Degrowth feels less like the active pursuit of ending growth and more like stopping the desperate attempts to squeeze out one last drop and managing the damage that happens when it does end on its own. But if growth will end on its own, how do we know when it has? How can we tell if we aren't just in a "slump" on the road to yet further gains? A reasonable place to look for signs of the end of growth are in developing countries, who, as the label implies, should theoretically have the most room to grow.

Conventional wisdom says that development in the economic sense happens through manufacturing, but the power of manufacturing to grow economies has waned:

Rodrik’s observation is that deindustrialization has been happening across the Global South as well, where industrial employment has already peaked and begun to decline. This is “premature” in the sense that the peaks are coming at a lower level (measured in share of employment and output or the level of national income) than they did in the now-rich countries that industrialized earlier. At the height of the golden age of capitalism in 1973, Japan, Germany, and the UK had roughly 40 to 50 percent of their populations working in manufacturing. In Brazil, by contrast, the peak, reached in 1986, was 23 percent; for Nigeria, in 1991, it was just 13 percent.

Service-led growth was put forward as an alternative development path, but growth driven by services pales in comparison because productivity in services does not grow at the same rate that they do in manufacturing and they seem incapable of employing as many people:

Rwanda, which averaged over 8 percent annual economic growth from 1995 to 2015, has also been offered as an example of service-led growth. A major component of the country’s “service exports” is tourism, which is said to have grown over 20 percent per year between 2002 and 2012. As with India, even proponents of the service strategy give reason for skepticism. In this case, “The main driver of tourism, gorilla trekking, is reaching full capacity,” economists Ggombe Kasim Munyegera and Richard S. Newfarmer wrote in 2018, “and the country needs to develop additional attractions to keep the sector growing.” Even if these attractions materialize, which one hopes they will, it is important to remember we are talking about growth from a very low baseline. In terms of purchasing power–adjusted GDP per capita, Rwanda ranks 166th in the world. There is no evidence here of a way for poor countries to become middle-income countries.

Manufacturing demand is limited; eventually you reach a kind of saturation unless demand is stimulated/constructed in some way (I'm reminded of Aaron Benavav's Automation and the Future of Work):

Unlike in the United States, investment in China is not held back by the requirement that it produce private profits. But even unencumbered by this requirement, Chinese officials find they have run out of outlets for public investment: “We have plenty of bridges and roads already,” an official from Sichuan Development, a state-owned enterprise, told the Financial Times in 2019. Over the last decade, Chinese manufacturing has also declined as a share of employment and value added.

The end of the piece talks about "just-in-case" production (in contrast to "just-in-time") where overcapacity becomes a virtue, i.e. a buffer against catastrophes like a pandemic, and a turn towards domestic production for domestic needs rather than export-led growth. I've seen more talk of domestic manufacturing as a national security issue in the US amid the supply chain scares of COVID-19; but in the context of developing countries such an inward turn is more about serving the population's needs (which I guess is a national security issue from the perspective of some people). But my understanding is that the debts that many of these countries hold basically require them to pursue export-oriented development as part of those agreements and out of necessity to pay back those debts? And domestic production will be undercut by cheap imports, so such capacities will struggle to develop. This part reminds me of Ha-Joon Chang's great series, "Economics for People" and his book Kicking Away the Ladder where he discusses how critical protectionist policies were in the early development of the rich countries.

I wonder, when does growth != accumulation? That is, is growth always just the rearrangement of wealth or wealth-potential, and how much of the growth of the rich nations is just the capturing of the wealth of the rest of the world? Poorer countries can't really replicate that.

Amazing Cultivation Simulator

Amazing Cultivation Simulator

I find a lot of interesting stuff while searching for images, and this time I found Amazing Cultivation Simulator, a Rimworld/Dwarf Fortress-like game but set in a world of Chinese mythology.

It's really overwhelming. Way more like Dwarf Fortress in terms of complexity than Rimworld. It actually might be more complicated than Dwarf Fortress. I only played very briefly—I don't know when I'll have a chunk of time to dive more deeply into the game, but it looks like there are tons of different subsystems and subgames that could take weeks to fully digest. They all look interesting though, like the feng shui mechanic. But these games walk a fine line between a engaging story generator and a meticulous management nightmare.

Amazing Cultivation Simulator

Amazing Cultivation Simulator

It's listed as only Windows, but runs decently on Linux through Proton.


<< >>