Monday, September 8, 2008

I am finding it hard to not include every detail, so this has a little bit more of that than the RV-7. I have to watch out for the polygon count, having the simulator's performance in mind, but I figure it is always easier to take a high detail model and scale it down than the opposite.

Wednesday, September 3, 2008

So tonight is the second night of work on the first task in the project, creating a 3D model of an RV-7. I have one more night, according to the plan, to finish this up. I plan on creating some basic textures (one of my weaknesses right now) to have some color on it. Can't wait to see what that looks like... For now, here's what the model looks like. I tried keeping the polygon count to a minimum, while adding enough detail. Click on each image for a full-resolution version.

The Project plan is done. If I am incredibly prescient, and have actually predicted every single activity right, it will take 219.5 days until I have a decently completed version of Tower Simulator. That sounds like a lot (and if that number is anywhere near accurate, I'd be very surprised. It could be a lot less or a lot more, who knows?), but it involves a lot. Here's what I have planned (in bold are the main sections):

Thursday, August 28, 2008

I make no fuss about the fact that sometimes I find it hard to police myself in regards to following schedules, so I have hired a project manager: my wife. Maybe it sounds crazy to you, but this will keep me much more on track regarding the project plan for Tower Simulator, as she has been very serious about it. I'll be posting a Gantt chart of what the project looks like right now.

Sunday, July 13, 2008

Today I found some time to test loading a heightmap, which I generated from a 10m DEM file, into XNA just to see how easily I could do it, and how good it would look.The result was pretty good. Some information before you watch it:

The colors are simply based on the height of each vertex, just to have some color. They are not related to anything else from the real world.

The app runs at 60 fps without even sweating, but the video below is running at 30 fps due to compression

The depressions that look like wholes on the opposite side of the mountains are either DEM noise or lakes, I have not investigated it yet

Saturday, June 21, 2008

I had the opportunity of trying out TowerSim, and have to say I was pretty disappointed. I had a longer list of things I didn't like, but here's the major stuff:

Graphics are sub par - For today's standards, the graphics are really not very good. Some interesting things, such as shadows that fade into transparency as they get away from the object casting them, and point lights for runways and taxiway lights that do get very small at a distance (unlike the light "gobs" that MSFS has) are good ideas, but the texture resolution, aircraft models, terrain resolution, weather conditions (rain and snow) are not very good.

No tower cab - the view from the controller's perspective is simply a point in space, without control panels, monitors, glass or anything else to represent the inside of a tower. It is as if you were floating in space.

Aircraft motion - This is a soar point for me. I think part of a realistic and fun Tower Simulator is aircraft moving as they do in the real world. The aircraft I watched tended to fly a precise approach path, without a single foot of variation, hit the runway exactly at the same point, perform no flare whatsoever, and have unrealistic angles of pitch.

Controller's interface - The radar scope is very similar to the one I am designing, but the text window that allows the user to control aircraft is cumbersome and slow. It could also have been a bit smarter, such as recognizing "cleared for takeoff runway 9" instead of forcing you to type "cleared for takeoff runway 09".

No voice recognition - Controllers don't control via text, they do it via voice. ATCsimulator does a good job at that, so there's no reason these guys couldn't get it right.

Robot-like pilot voices - They used about 8 people to record different pilot voices and accents, but the stitching together of words sounds pretty mechanical and unnatural. I have not cracked the nut on this yet, although I have found a couple of expensive text-to-voice engines that can do a great job. I just have to discover how to do it cheaply.

Performance issues - I left Chicago O'Hare run without controlling aircraft, and the performance quickly dipped below single-digit frame rates. More and more aircraft showed up, and the simulator had no way of deleting older aircraft, or any other means of stopping it from affecting performance.

All in all, it is not a bad effort, but I expected more. I guess this is good news in the sense that the field is still very much wide open for a good Tower Sim, but I could have been a bit more encouraged by stiffer competition ;).

Sunday, April 27, 2008

I have known for a long time that there is a community out there just dying to have a good tower simulator. This means that this community is actually pretty sizable, and is great news for everyone! Raising awareness about tower simulations is only one of the good things this software will do.

I like the following features, besides the basic stuff that needs to be in a tower simulator:

- Career mode- Real-world airline schedules- Service vehicles

The visuals look quite good, but I am more interested in how realistic it will be. Maybe a demo will be out soon? Here's to hoping.

As you have probably noticed from the poll on this site, there were some major airports I was considering including in Tower Simulator. After watching a very well-done documentary on Van Nuys, this airport became a very strong candidate, perhaps even number one!

This airport has everything to make a tower simulation interesting. Beautiful scenery with some pretty high terrain close by, varied traffic (small pistons, flight training, business jets, news helicopters). OK, there are no airlines, but we can fix that by having another airport in this release. Not to mention it is the world's third busiest general aviation airport, as well as the 25th busiest among all world airports, with 1,200 operations per day. That should keep everyone pretty busy :).

Another interesting point is its proximity to LAX and Burbank, which means lots of coordinating between the three facilities. This would allow me to develop the intra-airport communication system that I have been thinking about including. This, of course, exists in real life, and I think adds a lot to a controller's responsibilities and overall perception of realism.

Uhuuuuuuu, after a lot of planning and effort, we have arrived in Columbus, OH!!! The good news, as it relates to Tower Simulator, is that I will now be able to resume development, as the dust settles down. Stay tuned.

Sunday, March 23, 2008

Seen this? It looks pretty good. At this point in time, it looks like it's not a very detailed simulator, but more of a mission overview. Graphics looks very good. It is made in France, but I wonder what language they are using. No mention of XNA anywhere...

Friday, March 21, 2008

I am relatively new to blogging. One of the things that helps me keep up with other blogs I like to read is a feed reader, also called an aggregator. There are many different ones out there, but I really like Google Reader.

Google Reader allows me to check feeds very efficiently on my laptop or on my phone, since they also have a very slick mobile interface. I like the fact Google is smart enough to check what type of browser is accessing their sites. By doing that, they can tell if you are accessing from your phone or laptop and display the proper page (the mobile page is very barren, just text, so it loads very quickly on your phone).

Let me know via the comments if there are other aggregators you like to use, I am always checking new programs out.

The latest news are that I have been promoted. I have just returned from France and Monaco, travelled to Vermont the next day, spent one day back at home after that, and am now in Columbus, OH house-hunting. Life moves fast!

One of the cool things about this last trip is the hotel is literally on the airport, it sits between runway 28L and 28R, so I have planes taxiing about 300 feet from my window! Very cool!

Sunday, February 24, 2008

One of the things that makes modern games look so good is called Normal Mapping. It's a technique that allows the GPU to deform a simple mesh (an object made of relatively few triangles) with a special image made from a much more detailed mesh of the same model. The result is few triangles, which means faster rendering, but lots of detailed thrown in at render time by the GPU, which means better looking models. Read the Wikipedia article in the link to understand it. I plan on using normal maps a lot in Tower Simulator.

This can be applied in very small-scale object, such as a telephone used to communicate to other ATC all the way to a whole planet, which is what this video is all about. It is not rendered in XNA, as I have not learned to do that yet, but in modo. I just wanted to learn a bit more about normal mapping and the quickest way was to use this software, which is what I use to create models.

The video portraits a perfectly smooth sphere model with 288 polygons with to textures applied. One is a color map of the surface of Mars, the other a normal map of the surface of the same planet. The normal map does not show as color, but instead it allows the GPU to deform the smooth surface I created to show elevation of some major features and craters on the surface of the red planet.

This render is made out of 1500 frames playing at 60 frames per second. The blogger upload came out darker than what I wanted, but you can still see some of the major elevations such as the huge volcano that shows on the beginning and end. Notice how it remains partially lit for a little bit once it moves into the shadow area as Mars rotate. That clearly indicates it is higher than the rest of the surface. You can see this in reverse towards the final seconds as a canyon moves into view.

Sunday, February 17, 2008

I have planned to add multiplayer to Tower Simulator. It will work over system link, which means a bunch of computers connected via Local Area Network (LAN), or over the internet. This would allow more than one person with a copy of Tower Simulator to man different positions, such as Clearance Delivery, Ground, and different Tower positions (in big airports it is common to separate the workload between two or more Tower positions, each with a distinct frequency).

That will be really cool, but another option I plan to implement is interfacing with Microsoft Flight Simulator (MSFS). I have not looked into it yet, but I am pretty sure it can be done without much fuss. Tower Simulator would look at the airplane being flown in MSFS and try to do a best match, based on the aircraft that will be available. Communications will happen over a voice channel.

Another cool interaction could be done with ATCSimulator, which is in version 2 at the moment. This simulator covers the enroute, approach, and departure part of the ATC business, and would be a great complement to Tower Simulator. I have not talked to the author yet, and don't plan to until much later in my own development, but it's definitely a goal.

Friday, February 15, 2008

This is pretty cool. Whenever you create a game, one of the hard parts is writing some sort of processor that can, well, process the assets you want in the game. What does that mean?

Let's say I design a kick ass airport in 3DS. I now want to import that into my simulator. How do I do it? My game doesn't just have an "Open file" option, and it sure doesn't understand a .3DS or .MAX extension. So, what are our options?

I could go to Wotsit and take a look at the structure of these file types, meaning their innards, and write some code that can sift through that data and find useful things I need, such as vertices locations, UV map coordinates, etc.

Great, now I can import my cool looking airport and we're in business! Well, not quite. I still need to be able to draw it, and that means I have to write code to run through the vertices and see what textures goes where, load those textures, check everything, then draw.

And what if someone else makes a good airport in another 3D creation tool and I want to add it? What about audio? Can you see how in depth this can get? As a matter of fact, game studios have hordes of people working on just these portions of the code. Lots of work. Boring work, if you ask me.

Enter the Content Pipeline. XNA Game Studio was created by guys who created games for a living, so they know where the pains of the process are. With that in mind, they have created a very cool and streamlined "pipeline" through which we can import all kinds of files. OK, so it's not any kind, they are limited to:

You can now call "ship" in your Draw code and bam!, it's on the screen.

Of course there are shortcomings. The pipeline, as shipped, is pretty limited, but it was meant to be so, since the XNA Team cannot think of all different ways you need to import and convert assets. So they made this a very easy class to inherit and change, adapt, gut, add to, whatever you need, to get exactly what you want out of it. Nice, huh?

Once in a while I will post entries that are more technical in nature. This is the first of them. You should read it anyways, as you'll see the benefit for users at the end.

Last night I was reading about data structures. The folks over at XNA Game Studio have written a four-part article on these, and it made for some excellent reading. Well, I haven't read Part IV yet, but the first three were very cool.

Data structures have to do with storing, retrieving, analysing, and modifying data. In my case, these structures will hold things such as all the aircraft that are in the air, their position, altitude, flightplans (I am considering having overhead traffic at both high and low altitude), etc., as well as anything else that gets bunched up in collections of the same kind.

There are different types of data structures and, like aything else in life, each has its pros and cons. The existing data structures in C# and XNA, and their brief descriptions, are:

- Arrays: A size-defined sequence of data types. Imagine a specific-sized box. Now add, say, 17 of them side by side, glued together. That would be a 17-item array. It is very fast to add and retrieve information, but if you have to change its size by suddenly adding another item in the middle, things get slow. Good for a collection of a static number of items (i.e. number of taxiways in an airport. Those don't change very often).- Lists: Similar to arrays, except the number of "boxes" is not defined, so they are a little more flexible. Better to hold a collection of items whose total number is unknown or changing over time (i.e. number of arriving flights)- Collections: Very similar to Lists, except these are good for inheritance (for object-oriented programming, inheriting is making a copy of an object that you can then customize for your own needs)- Linked Lists: These are very interesting. They are like an array, except instead of being boxes that are glued side-to-side, these are boxes that know where the previous and next are. They could be half a world apart, but if you looked at one box, it would have the address of its predecessor and its successor. The cool thing about this is if you have to add a new itemin the middle of the existing items, you just put it in and change the addresses of predecessors/successors accordingly. The bad part is if you are looking for the last box, your code has to run through every box, starting with the first one, before it can find the last.- Stacks: Exactly as their name says, these are stacks where you add an object and it goes on top of the stack. When you retrieve an object, they come out in LIFO order. LIFO is Last In First Out. Think of a narrow dead end street being used to park cars. You can only remove the car that was parked first after all the previous ones behind it have been removed. How does this help TowerSIm? Not sure yet, I'm not planning on having vallet parking :).- Queues: Same as Stacks, but FIFO. You guessed it, First In First Out (i.e. a list of aircraft that have requested clearance).- Dictionaries: Part IV which I still haven't read.- Trees: Part IV which I still haven't read.

Pretty cool right? Well, for me it is :). Understanding these will ensure that I use the proper ones for different things, and will give you, the user, the highest possible frame rate.

Monday, February 4, 2008

OK, so maybe the title did not turn out to be as clever as I thought it would. What's happening is I am upgrading my development machine. I am switching from a Dell XPS 1710 to an HP dv9700t. The XPS has been wonderful, and has a videocard that absolutely rocks (GeForce Go 7900 GTX), but it is starting to age a bit on the CPU side (mine is one of the first ones, it only has a Core Duo 2GHz).

The new HP has a GeForce Go 8600M GS, which is not the top of the market as far as mobile nVidia chips go, but it's not too bad. It isn't as fast as the one in the Dell, but it does have several advantages:

- Shader model 4.0- DirectX 10- HDR- nVidia PureVideo- PowerMizer (to save power for using it on the go)

The new laptop also has a 2.5GHz, 6MB L2 cache Intel Core 2 Duo T9300, which should be a nice upgrade for me. Like anything in life, this upgrade is a compromise. I lose some screen resolution (Dell's screen runs at an awe-inspiring 1900x1200), but gain a bit in weight (I do normally take my dev machine with me in my travels), and catch up with times in many different areas.

The best part is I am probably going to be even Steven once it is all done, for I got a great $500 off coupon for the HP. Thanks Slickdeals.

I will shortly post some benchmark comparisons of TowerSim once I put these two machines face-to-face.

Thursday, January 31, 2008

I have been working on an app for work. It's written in C#, and it's a data app. One database, and several instances of the app connecting at possibly the same time. I haven't really developed anything with data integration before, so I went hunting for info.

I was really surprised at how hard it was to find what I needed. Starting simple, all I wanted to do was to type some text in a text box, then save it to the database. It IS really simple to do, but the hard part was finding how. I eventualy got it.

I started by using SQL Express, without really thinking about it much, but I realized that it was overkill. I switched to Access, since all company computers have that (just in case, I still don't know if the client app needs to run on a computer that does have Access. My guess is no, but better safe than sorry. Call me lazy, I am). Due to ADO.NET, the type of database doesn't really matter, so most of my calls remained the same between using SQL and Access. Cool. I hear LINQ goes even further than ADO.NET, but I'll leave that learning curve for the future.

I also had to share data between a parent and a child form. That was actually a lot harder than it had to be. MS should really have some pipeline between parent to child and child to child. Once you set up an event handler it works great, but it truly is a pain compared to what I think it should be (declare the variable in either form and using syntax, explain to the compiler "this variable belongs to this form, but that, that, and that form can access it". Would be great).

I have the interface almost ready, and the form for adding a new record to the database is working great. Next will be figuring out how to have several instances working at once without corrupting the database. I could have looked it all up before I started but I have been finding out that is not the most efficient way to work, at least for me. I rather get going, get something working somewhat, then fine tune it and add what's left. Seeing something up and running, even in a preliminary stage, is key to keeping me motivated.

Why am I talking about this? Well, C# skills will definitely help me out in TowerSim. That and it's for work. Work pays bills, which allow me to sit in my idle time and code TowerSim. Logic is a beautiful thing.

Wednesday, January 23, 2008

I guess they could have chosen this title as their company name, but Electric Rain sounds a lot cooler. I have been super busy at work, creating a pretty important presentation for this Thursday. Instead of the beat-to-the-ground PowerPoint approach, I decided to branch off into the unknown and try Eletric Rain's StandOut. It's still in beta, but it's very cool. It's a presentation software (don't let them catch you calling it a "slide" presentation, in their workflow, slides don't exist) that kicks butt, done completely in WPF. Can you say sharp? Yep, you can, and you should, for that's how everything will look.

The learning curve can be somewhat steep, but by using Blend to build the DLL components you then integrate into layouts, which are the bits you can make a presentation from, you can rock in no time. You're only bound by your creative spirit on this one. Awesome.

Wednesday, January 9, 2008

This is something I will have to implement for a realistic Tower simulator, the planes will have to talk to the user, and vice-versa. On the planes side, their calls are coming from text and will need to be transformed into voice. There are several text-to-speech egines out there, but I came upon one (NeoSpeech) that completely blew me away. It almost sounds like a human being, scary!

Saturday, January 5, 2008

As I sit at EWR airport, on my way to LIT, the thought struck me if I should have a completely 3D interface or if the 3D stuff should run in a window inside a bigger WinForm.

Some of the pros/cons that come to mind are:

3D Interface

This to me is by far the more immersive environment, where you have the outside world as well as the inside of the tower all rendered in 3D. In this case, the user would have to "walk" around in the tower floor to go see different computer screens, to look at different areas of the airport, etc. This also means the input interface would have to be built a little more robust that with the other alternative being discussed here, which could extend the development time a bit, when coupled to actually building the inside of the tower and making it interactive.

WinForm

This would definitelly allow a faster development, as a lot of the information being displayed to the user (such as flight strips) could simply be done via buttons, list boxes, etc.

I am undecided right now and think will be for some time. A decision does not need to be made soon, as I am still coming to grips with XNA and game logic.

In my never-ending search for more information, I bumped into a couple of tutorial sites that are excellent for XNA. CampElmXNA has tutorials on both C# and XNA. Riemer has been known for his DirectX tutorials, and now has a very extensive series (substitute "a very extensive" for "60"!) of XNA tutorials. Nice job guys!

By the way, Riemer's explanation of what is XNA was a breath of fresh air. Perhaps for people involved with it for some time the following statement is obvious, but it took me some time before I figured this out:

Released in December 2006, XNA is intended to push the ease of game programming to the extreme. XNA is new wrapper around native DirectX. As development on a new version of Managed DirectX has been cancelled, XNA can be thought of as the new version of Managed DirectX.

Tuesday, January 1, 2008

OK, I am pretty happy. I just created a runway (a plane in 3DS) and a tower cab (pretty simple, really, 18 polygons), and using the Grumman J2F, hooked a very simple (but important) pre-development test. I have some keyboard inputs controlling the direction the plane moves in, and the camera located inside the tower cab. The camera tracks the plane, and it looks pretty good. I know, it's a small step, but it's one that gives a lot back. It's very cool to see the plane moving, the camera tracking, I'm excited!

This is a render test I have just cooked up. It uses a free model I got from Turbo Squid of a Grumman J2F Duck. A very nice model with around 8800 polys. I did not use any shaders for multiple instances, just simply loaded each model as if it was different, and drew it, so there are no optimizations at all.

This was to see what kind of performance I got. With the 21 models you see here, fraps (which I used for measuring the frame rates and recording this video) shows I was still rendering at 60 fps. This is in a Dell XPS M1710 laptop (GeForce Go 7900 GTX). Not bad at all!

Check this out. ProFX and MaPZone seem to allow procedural texturing on the fly, so that you don't need the gigabytes of textures to ship with your game. More than that, MaPZone can make diffuse, specular, normal, and other maps all fit together effortlessly. Alright, I'm interested. Oh, and did I mention they are an XNA partner, so they have a special (read dumbbed down) version of MaPZone free. Did I mention I was interested?