Home       About Me       Contact       Downloads      

Blog Entries

I've expanded the descriptions here to give a quick overview of the project. All parts are linked together with "previous" and "next" links at the top of the page, so you can start anywhere.

November 19, 2010
Part 1: It's a Small World

Introducing myself and the project. I build a simple block landscape implemented with an Octree.

November 29, 2010
Part 2: Going Places

We add a camera and motion, so you can run, and jump and fly... Whee! Includes a discussion of collision detection.

December 8, 2010
Part 3: Good Old 2D Graphics

Basic 2D graphics for overlays like status bars and UI controls. Also some comments on file formats.

December 15, 2010
Part 4: Transparency

Various issues related to transparency. At this point in the project, I am doing things in a very old-fashioned way that doesn't take advantage of hardware. Look to later parts for a more realistic approach.

December 22, 2010
Part 5: Plans and Directions

A list of the various major parts of the project, and discussion of which to do first. I settled on graphics, since I figured no one would even try a bad-looking game.

December 29, 2010
Part 6: The Shape of the World

Speculations on what a semi-infinite, modifiable MMO should look like. A side trip into ray tracing, which I hoped would help me understand lighting.

January 5, 2011
Part 7: Video Production

Improving ray tracing performance enough to handle a large chunk of Minecraft data. First of the videos.

January 11, 2011
Part 8: World Building

Building an asteroid out of cubes, and ray-tracing the result to give realistic lighting. A nice asteroid video.

January 20, 2011
Part 9: A Larger World

A discussion of what sorts of objects will be in the world, and an attempt at asteroid fields.

January 26, 2011
Part 10: Attempts at Art

Designing a solar system with nebula in the sky. The nebula looks pretty good, but the asteroids still need work. Another video.

February 3, 2011
Part 11: The Need for Speed

My first correct use of index and vertex buffers for drawing the sample Minecraft data. Thinking about switching from DirectX to OpenGL.

February 10, 2011
Part 12: Adventures in OpenGL

Learning OpenGL and trying it on my various computers. This was not encouraging! I also wondered a bit if any ambitious kid programmers out there could still manage to learn how to do graphics programming at this level. There's a lot to know, which kind of discourages experimentation.

February 18, 2011
Part 13: The Cake is a Lie!

OpenGL 3.3 did not work under the current version of OSX. I was very disappointed and doubted the wisdom of trying to support multiple platforms. Looking back, I would have saved myself a lot of aggravation by just switching to DirectX 10 and sticking with Windows.

March 4, 2011
Part 14: Portability

Getting the demo to work on Windows 7, Windows XP, Linux and Mac! This was harder than I expected. Even two years later, I still run into machines that won't initialize OpenGL or run the shaders correctly. On the other hand, the statistics I'm gathering say that most people are successfully running the demos.

March 24, 2011
Part 15: Huge Tracts of Land

Rendering a larger world, where chunks of scenery are paged in and out as required. Debugging multithreaded code is a pain in the neck, by the way...

A video touring the TwentyMine world.

April 10, 2011
Part 16: Fun with Shaders

Can I really render a 1024 by 1024 by 128 block of cubes at interactive speeds? In this part, I first consider some simpler rendering for distant data.

April 15, 2011
Part 17: Less Fun with Shaders

This is the part where I discover the timing of different shader primitives are wildly different on the machines I have. This makes it hard to write a completely portable shader.

Fussing over all these platform differences was really taking a lot of fun out of the project. My view of the graphics industry was starting to change...

May 1, 2011
Part 18: Procedural Landscapes

Procedural generation of an asteroid field from Simplex Noise. The video shows movement through the field.

May 10, 2011
Part 19: Transparency Again

A demo that renders the large landscape at speed. Now with transparency in the distance! It turns out this code was wrong. See next part. And a video.

May 18, 2011
Part 20: Still More Transparency

Let's try that transparency code again... I'm doing "real" transparency as in the previous demos, but sorting incrementally instead of on each frame. The video shows the out of date portions.

May 24, 2011
Part 21: Light and Shadow

Some preliminary experiments on lighting. This involved stepping through the Octree to find lines of sight to the sun. The performance wasn't acceptable and I eventually stopped using the Octree data structure. I do a bit more with lighting later in the project.

June 15, 2011
Part 22: Something Like This

I build a mockup world and videos of several world concepts -- large planets, plain asteroids, green asteroids, and cylindrical habitats.

June 21, 2011
Part 23: Realism and Variety

Some thoughts about what a world contains, and whether it should be art or the result of procedural rules. Real scenery is so complicated!

June 28, 2011
Part 24: One With Everything

More landscape variations. This is the part where I decided on the simple planet with asteroid belt and moon with ringworld.

July 1, 2011
Part 25: Spin-offs

One of my many attempts to restructure the code to make useful libraries out of it. It's hard to know if this is worth the trouble. Until someone decides to use the code for another project, it's all just time-consuming cleanup.

July 16, 2011
Part 26: Trees

I implemented the "space colonization" algorithm for generating tree branches, inspired by Miguel Cepero's Procworld. The results are interesting, but I was never really happy with the algorithm.

July 30, 2011
Part 27: Framework

Updating the framework to support both OpenGL 3.2 and OpenGL 2.1, for use on the Mac and older Windows/Linux hardware.

August 14, 2011
Part 28: Far Horizons

Maintaining an infinite landscape with varying levels of detail. The video shows subdivision of cells from above, then a player-eye view of the landscape, with and without grid lines.

August 17, 2011
Part 29: About the Demos

I asked for some feedback about demos and the blog. Maintaining the demos was a lot of work and I wasn't seeing the number of downloads I had expected. It appears that the videos are more popular than the demos.

August 26, 2011
Part 30: Cubes and Polygons

An experiment in adding a polygonal landscape to the cube world. I went back and forth on this idea several times during the project.

September 2, 2011
Part 31: Decals

To add and delete blocks, you need to see the selected block. Which isn't as simple as it sounds.

September 10, 2011
Part 32: Mining Minecraft

I decided to build a viewer for Minecraft save files, with the goal of letting players extract their favorite buildings from Minecraft and import them into my world.

September 15, 2011
Part 33: Taking Contributions

Some discussion of the problems of taking contributions (especially code) from other people. So far in this project, everything has either been open-source libraries or my own work.

September 25, 2011
Part 34: Beyond Cubes

Adding some brick types other than cubes to the demo. This required different rendering code, and import of models from Collada to my own format. The video shows a tour through the TwentyMine minecraft world.

October 3, 2011
Part 35: Minecraft Lighting

I try to reverse-engineer Minecraft lighting. The output is vertex lighting added to my existing rendering code.

October 6, 2011
Part 36: More Lighting

I think I've done all I can with Minecraft lighting. The video shows day and night versions.

October 16, 2011
Part 37: Fog

Fog hides the edges of the world, but I'm still not sure I like it. The video shows different fog distances. Chunks are faded in during a load.

October 28, 2011
Part 38: Building a Solar System

Putting together some parts of the SeaOfMemes world. Some design speculation, and a different design for generation ships.

November 7, 2011
Part 39: An MMO

A year has gone by on this project, and there's no MMO. So I wrote one. This is the Landscape demo from Part 28 with chat functions. Though hardly used, the server has kept running for over a year.

November 14, 2011
Part 40: Game Design

A possible game design, if I ever get this world built!

It was around this part where I started to have more severe health problems (limited sleep for weeks at a time) and things slowed down.

November 21, 2011
Part 41: Construction Debris

This discussed some of the rendering issues for an entire solar system. I implemented a spherical world in a shader (my most complex shader yet) and wondered about some of the aliasing issues I was getting.

Another video, showing movement between the objects of the solar system.

November 27, 2011
Part 42: Planets are Complicated

I tried to add clouds, reflective water and bright lava fields to my shader planet. This worked well on some of my display hardware, and not at all on others. Doing a realistic planet at different resolutions as you land from orbit seems hard.

December 2, 2011
Part 43: A Simple Plan

I listed all the things that still needed to be done, and ran a poll about what to do. I have a lot of anxiety about putting a game out there and having it fail. I'm not sure people give you a second chance.

December 9, 2011
Part 44: The One That Got Away

I wanted to handle a dusty asteroid belt, or realistic atmosphere on a sphere. I got an idea for doing this in the shaders with an odd lookup table. It sort of worked in my first experiments, but I couldn't find a way around the various resolution issues.

December 15, 2011
Part 45: Genetic Algorithms

Since I'm making no progress at this point, I drag out an old demo I wrote showing a use of Genetic Algorithms. A set of creatures that follow a trail are evolved, and you can play with the population/reproduction parameters. This is written in Java and runs in the browser.

January 6, 2012
Part 46: Back To Work

I reimplemented text in my overlay graphics with the FreeType library, so that it worked on all three platforms (the previous version had been Windows-only.) I also started wondering about Unicode and whether I should support it.

January 17, 2012
Part 47: Intellectual Property

As part of the PIPA/SOPA protests, I wrote an essay on intellectual property and copyright issues. I don't agree with the prevailing "piracy is killing publishers" attitude. Instead, it's changes in advertising and lower barriers to entry that are killing publishers. These issues are not new either, with variations going back decades.

February 6, 2012
Part 48: Programmer Art

Frustrated by lack of progress on my main project, I fool around with some 3D graphics, trying to make an alien-looking plant and a flying saucer.

February 16, 2012
Part 49: Sound

I get sound working on Windows, Linux and Mac using the DirectSound and OpenAL libraries. Then I build a simple movie with flying saucers approaching the Earth. See the video.

March 10, 2012
Part 50: Spring Cleaning

I release all the demos and source again. Maintenance of this code is taking a lot of time, but I'm pleased overall with how it looks and runs. Still bugs and platform issues everywhere, but it's not horrible.

March 20, 2012
Part 51: Internationalization

I stupidly decided to support Unicode and spent too much time tearing up the floor on all the code. Really supporting multiple languages means implementing keyboard input helpers and so on, so all this really does it support (badly) some European languages. Frustrating!

March 27, 2012
Part 52: Scripting Languages

With no new progress, I talk about the various open source scripting languages available. Nothing was actually done with this. Lua was a popular choice in the poll, but I'm not sold on the syntax. I also worry about security in a shared world where anyone can introduce code.

April 3, 2012
Part 53: Storing World Data

Since I was still not feeling up to anything hard, I defined the interface of a database for the project, and did a partial implementation.

April 12, 2012
Part 54: Stuck

At this point, I really ran out of energy due to health issues. I was trying to think of a data structure for a modifiable landscape that wasn't just cubes, but got nowhere.

April 19, 2012
Sleepless in Sacramento

A reader suggests Dual-Contouring for landscape data, but I'm too short of sleep all the time to figure it out.

April 27, 2012
GUI Design Contest

Since I wasn't getting anything done, I decided to improve the GUI and started a 99designs contest. We had an interesting discussion in the comments.

May 3, 2012
GUI Design Contest Results

Results came back from the design contest. I was impressed -- commenters less so. I did find 99designs contests to be brutal for the designers. Even the winners get very little money and the losers get nothing. The site itself takes a very high percentage. I ended up paying my second choice directly since I was embarrassed over the whole situation.

May 16, 2012
Writing a Game

In frustration, I started new mini-game inspired by the game Proun. I created this little spaceship and asteroid and started to think about game play.

May 27, 2012
Part 55: Framework Architecture

I talk about my internal framework and getting the GUI code finished. Some new demos of the GUI were written, but I didn't finish enough of it to attract any other users.

June 5, 2012
Part 56: Don't Hit Me!

I did a bit more on my mini-game, but eventually decided it was just procrastination. I was having a lot of trouble finding a goal I could achieve on 4 hours sleep a night!

June 18, 2012
Part 57: The Build/Release Process

Building and releasing all the demos on all the platforms was taking hours at a time, and was very error prone. I write about the process in this part.

July 4, 2012
Part 58: The New Build Process

After some more research and automation, I create a simpler build process. Testing on each platform is still a nuisance, but there's nothing I can do about that.

August 6, 2012
Part 59: Gathering Statistics

A reader decides to compile the demos and can't get them to work on his laptop. The results are like nothing I've seen, and I can't imagine what is failing. I end up buying an identical laptop just to debug it. It turns out the OpenGL drivers have a bug.

To get some idea of how often this is happening, I write a statistics server and add code to the demos to gather system performance and time spent running each demo.

August 16, 2012
Part 60: Our Story So Far

I really "hit the wall" around this time and had no idea how to proceed. The project is seriously off track at this point!

August 23, 2012
Part 61: Redesigning Crafty

Although the title suggests I was working on the demo, I was actually playing with 3D printing of Minecraft data. The printing service Shapeways produced a piece of the TwentyMine server for me, for not too much money (since it was small.) A larger piece was ridiculously expensive and I wondered why.

August 30, 2012
Part 62: Character Animation

I find some open source character animation sequences in BVH format from Carnegie Mellon University and write a little viewer. Entertaining, but to use this in a game, I'd have to drastically reduce the amount of animation data. Here's a video.

September 6, 2012
Part 63: Landscape and Selection

I still have a problem with highlighting selected blocks, and try yet another way to do it. The last time I worked on this was Part 31, which used decals.

September 13, 2012
Part 64: Distant Blocks

I considered some of the issues with making a large landscape out of blocks and dropping the resolution in the distance. I had talked about this before, but not come to any conclusions.

September 21, 2012
Part 65: Instancing

I realized I could do instancing under OpenGL 2.1 (and so on older hardware) and tried some demos. I got odd performance figures because I did not understand what was really happening in the display.

September 27, 2012
Part 66: Rendering Again

More messing around with rendering cubes. I am seriously tired of cubes and low-level 3D graphics by this point! Anti-aliasing issues are a problem in this part.

October 4, 2012
Part 67: Scenery I Can Live With

I find an algorithm that makes distant cubes look tolerable and decide to use that rather than dual-contouring. In this part, I also try to automatically extract buildings from my sample Minecraft data, so that I can populate a planet with interesting buildings.

October 12, 2012
Part 68: Names

No real progress in this part. I continued to mess with rendering block scenery in the distance.

October 19, 2012
Part 69: Security

With no progress on the project, I talk about security and virtual machine issues. I want the eventual world to support scripting on objects, and I worry about viruses spreading within the world. I don't want the game to allow player machines to be infected.

I also point out that the industry solution is app stores, which just add barriers to independent software development and limit the types of apps which can be written.

October 26, 2012
Part 70: Application Roles

I write some more about virtual machine security and wonder what the correct solution is, if there is one.

November 2, 2012
Part 71: Update

The distant block world has been partially implemented. The blocks are there, but not textures for the summaries.

November 23, 2012
Part 72: Texturing Landscape

I get the textures to work on the summarized landscape. It doesn't look too bad. Still a lot of work to do for this to be updated in real time as a result of player construction.

December 2, 2012
Part 73: Topology

For fun, I implement the block landscape inside a cylinder (the asteroid habitat) and on the surface of a ringworld. Rendering it over a sphere looks like a problem, since I don't have a good rectangular tiling of a sphere.

December 10, 2012
Part 74: Very Annoyed

I don't like the summary of procedural cube landscape much. And I build a new machine with Windows 8. Some complaints about "why are they changing my UI??"

December 19, 2012
Part 75: Things Are Not As They Seem

I find some bugs, which reveal a long-standing problem with my rendering code. It's hard to believe I've come this far and still have these basic mistakes.

January 10, 2013
Part 76: Documentation

I generate some documentation web pages from the code comments. Basically procrastination on my part. So is writing this summary page!

March 23, 2013
Part 77: WebGL

Restarting the project by looking into WebGL. Perhaps this will let me distribute code without all these endless, frustrating platform issues. So far, I'm still skeptical.

April 1, 2013
Part 78: Another WebGL Demo

Converting the DontHitMe demo to WebGL. Some very preliminary performance numbers.

April 18, 2013
Part 79: Trees Again

The Trees demo converted to WebGL and improved a bit. And some new problems using WebGL.

April 27, 2013
Part 80: Emscripten

My evaluation of the Emscripten C++ to Javascript compiler. A basically working tool with lots of odd details to worry about. Messy!

May 5, 2013
Part 81: Emscripten Demos

I've compiled and run some complex demos with Emscripten. I guess it's a useful platform after all.

May 21, 2013
Part 82: Platforms

Trying to get all the demos running under Windows, Linux, OSX and Javascript without application code changes is a chore. It's not made any easier by different implementations of WebGL in the various browsers.

June 8, 2013
Part 83: New Source Code

The latest versions of the demos and framework have been released. The first update in months! Also, a discussion of 2D text.

June 28, 2013
Part 84: Seamless Textures

Played around with one of the oldest items on my ToDo list -- generating seamless textures procedurally. It works!

July 25, 2013
Part 85: Space Station

Can this space station be saved? I have been asked about putting a space station in orbit. I'm not sure what it should look like, and it doesn't have much build area. The deck is long and narrow, making for interesting layout questions. And it's kind of ugly!

August 16, 2013
Part 86: Worlds You Can Walk On

The SeaOfMemes demo completely rebuilt to cover the objects with landscape. Currently, it's just a texture, but you can see how it will work. There are also space stations, and rings around the planet.

September 8, 2013
Part 87: Working on Terrain

An update on my progress this month. The goal is real terrain for all the asteroids, stations, habitats, and the RingWorld. Also, I'd like a new way of controlling movement, where the player enters vehicles instead of just flying through the model.

September 29, 2013
Part 88: It's Blue

I keep plodding away on this. For a break from trying to generate nice terrain, I worked on the look of the space station. I don't know if this is the right direction. I'm still laughing at it.

October 27, 2013
Part 89: More Models

Not much progress recently, so I've been messing with the look a bit more. This part showed the Habitat object in the asteroid belt, and some stand-ins for transportation.

November 30, 2013
Part 90: Update

Miscellaneous topics this month, from 3d printing to z-buffer issues and cubes again. No new demos.

January 4, 2014
Part 91: 3D Printing

I took a break from the project and messed with 3D printing over the holidays. I got a couple of models printed, and hope for some more. An expensive hobby!

Home       About Me       Contact       Downloads