I did manage to get landscape generated on the fly as you move at different resolutions. The result is above. This has a few problems. For one thing, it's kind of ugly. I suppose it would be better if there were clouds and some distance haze. I'll try that eventually. I can improve the texturing as well. Right now, each cell is a solid color. Still, I have to say I'm not thrilled with the blocky look. This would be really much nicer with a standard heightmap.
Also, I think there's a bug. You can see at the middle left where the resolution drops by a factor of 4. The terrain cell algorithm computes the distance from the eye to the nearest cell in a chunk. If chunk size/distance is larger than the limit, it subdivides the chunk. That doesn't guarantee powers of two at each transition, but it seemed like it was doing that anyway in my previous tests.
Even if this were rendered correctly, I really need a nicer landscape function. The procedural generation I'm using now is very repetitive. It looks OK for a single beach or island, but not so good over a really large area. I could come up with a more elaborate function, but I think there are limits to that approach. I'm going to want to precompute a landscape and include it with the demo or download it from a server.
The landscape could either be the output of a simulation, or some real world topography. Perhaps I could blend or distort real topographic data to keep it from looking like pieces of the Earth. The two obvious problems with this are going to be the size of the data (can't afford to download gigabytes) and speed of access. As you are flying over the scenery, I need to pull it out of the database very quickly.
The big problem though is that the performance is terrible. I measured the summary creation code back a month or two ago and it was OK, so I'm not sure where I've introduced another time sink. I need to dig into that next, since the current version is unusable -- 10 times slower than it needs to be.
That's all that got done in the project this week. Now for some random griping!
A New MachineBack in Part 62, I mentioned that if you built a system around a small enough motherboard, you could actually 3D print a case for your machine. I haven't done anything about designing a case, but I did order parts and build a new machine.
For the motherboard, I selected the ASRock H77M-ITX Mini ITX Motherboard. For CPU, the Intel Core i5 with HD 4000 Graphics and since memory was so cheap, 16GB of G.Skill RAM. I threw in a Crucial 64GB SSD Drive. I've never used one of these before, but I thought the system would be a bit snappier if the OS loaded off the SSD. I also pulled my old external backup drives out of their cases and used them in this machine, giving me four terabytes of disk.
Building the system went smoothly except that the SSD drive would not run off the SATA 0 connector. I didn't play with it enough to see if it was a bad connector on the motherboard or what. There were four, and I only needed three. I've also noticed the system will suddenly decide it's not cool enough and turn the case fan on full. I'm not sure if I have the desired temperature set too low, or if it's some software problem.
Disappointments started with the software. I installed Ubuntu Linux, but apparently there's no vendor driver for the HD 4000. Instead I got the default driver, which just crashes trying to run my demos. I haven't dug into it yet, but it doesn't even get through OpenGL initialization.
I installed Windows 8 on the machine and was underwhelmed by the graphics performance. In the database I have, the 3DMark results for the HD 4000 are only 25% worse than my 3-year old NVidia GTS 250 (1210 vs 1550), so I thought I could live with it. The Windows Experience Index for the display is also similar (6.5 vs. 7.0).
When I run my demos however, they are almost 4 times slower on this machine than my main desktop machine. Again, it could be OpenGL drivers. I'd have to run some DirectX-based benchmarks to be sure.
Stop Changing My UI!!!
I hate Windows 8, but I expected to. I downloaded the preview release back in May, and thought the Metro interface was just a placeholder -- obviously it wasn't finished!
What I didn't realize until this build was that they dumped the Aero look completely, giving us the plainest, ugliest UI since Windows 3.1. I spent a couple of hours trying to get it to use colors I liked, but couldn't come up with anything decent. And controls/windows are still squared off with no shading. I can't stand to look at it.
This bothered me a lot more than I expected. The problem is that I live on my machine. I spend at least 12 hours a day parked in front of this monitor. Having the look and feel change this much is like having someone break into my home, change all my furniture, paint the walls orange and then leave, yelling "you'll get used to it!" over their shoulder.
This isn't just a Windows problem. Ubuntu version 11 changed the desktop and I'm still running 10.10 to avoid getting that. The new version buries things like the package manager and Terminal window deep down in menus. I'm sure I could get it all set up the way I like, but why should I have to? I just wanted the latest version of the kernel and libraries, not a new UI!
Even apps are a problem. I'm still running an ancient version of Firefox. I don't feel like learning new menus/dialogs and reinstalling plugins when the browser is just fine the way it is. But a couple of months ago Adobe pushed out yet another new version of Flash, and it crashed my browser. I tried to uninstall that, but Firefox still crashes at least once a day now. So I'm going to have to upgrade and get a new UI whether I like it or not.
To some extent I understand why this is happening. Tablets are the new thing, and the OS vendors don't want to support a separate desktop interface. Microsoft reportedly got rid of Aero because they wanted a less graphics-intensive power-hungry interface. On a tablet, they also want a less cluttered look with fewer small details.
Tablets and phones are sold to general consumers, not techies, so there's pressure to change the UI to a more consumer-oriented "just tap here" interface. That puts existing users and power users at a disadvantage. We're no longer the customer they are interested in selling to. I find the iPad interface limited, and iTunes to be extremely annoying, but there's no way Apple is going to jet let me dump directories of files onto their machine and have a full-function desktop.
Vendors also want to have a distinctive look, and to improve (or least change) the look as part of their marketing. The last thing they want is to say "Buy a new version of Windows/OSX/Linux that looks exactly the same as the old one!" (or exactly like every other brand.)
To some extent, I think we're in the early days of computers as an appliance. Back when cars were new, Henry Ford famously said of the Model T, "You can have any color you want, as long as it's black." It was cheaper to paint all cars the same color, and customers wanted cheap cars more than they wanted their particular style.
Computers are kind of the same way -- it's much simpler for the OS vendor to provide the UI, rather than allowing it to be completely customized. Customers want cheap, reliable software more than they want their own style. Up to now, computers have not been seen as stylish anyway, so a desktop wallpaper was all the customization you needed. As tablets and smartphones become universal accessories, I kind of doubt this will last. It would be like forcing everyone to wear the same clothes or have the same style of glasses.
I'd like the UI to become completely independent of the OS, but it's not clear who would write something like that. The vendors would hate anything that made their products look like everyone else's. A portable UI would have to come from an independent developer. It would be a hard product to write, and a harder one to market. I have no idea if an interface for changing the UI controls even exists under Windows or OSX. Does anyone know?
One Last Disaster
With all that space on my new machine, I wanted to share the drives on the network with my main machine. I used to be able to do that with workgroups and shared drives, but I couldn't find that dialog in Windows 8 (is it gone?) It seemed like the new "Homegroup" was the way to go. Unfortunately, I have an odd networking setup on my machines.
Instead of a router, I use Windows Internet Connection Sharing with two network adapters. One is connected to my cable modem, and the other to a Netgear switch. All the other machines are off the switch. I got this to work back three years ago, and I remember it was a bit of a pain. The Linux and OSX machines don't want to recognize the Windows machines and vice versa. I finally did get it all set up, but if I wrote down what I did, I can't find it.
Unfortunately, when I tried to set up a Homegroup on my main machine, it objected that I was not on a "Home Network." Both my networks were listed as "public network", and the LAN was "unidentified public network." Trying to fix that, I found some page that said I needed to reset my TCP/IP configuration, which would let me set up the network again and make it a home network.
I did that, and trashed my network settings. I can no longer connect to any of my other machines. Not even uninstalling and reinstalling the second network card did the trick. I don't know how I set the thing up in the first place! All I know at this point is that the main machine is not assigning IP addresses to the other machines, so they can't reach it. Any suggestions?
Sigh. I hate computers.
blog comments powered by Disqus