Archive for December, 2009
Good Wires Gone Bad
Posted by Eric DeBrosse in Hardware on December 16, 2009
I had to replace the Ethernet cable on the database server today. Whenever I used Remote Desktop to connect to the machine, I was getting a lot of vertical lines and garbage pixels. As it turns out, the signal was getting really crappy. The new cable should actually help the performance of the game server considerably, since the communication to and from the SQL server won’t suffer from so much network packet loss.
Upgraded Database Server
Posted by Eric DeBrosse in Hardware on December 14, 2009
I had a faster CPU laying around that I was able to put in the database server. I also upgraded its memory, switched out the old CD-ROM for a DVD-ROM drive, and installed a second hard drive that I can use for backups. I wish I had the money for all new database server hardware, but I guess it’s not in the cards for me at the moment.
While I was at it, I upgraded the database to SQL Server 2008. This caused a few issues with the game servers that I had to work out. It took me several hours to figure out why I could not connect to the DB using ODBC. As it turns out, I have to also specify the port number, i.e. 1433, in order to successfully make a connection. Apparently, the database server was trying to respond on a different port than what I was expecting. Anyway, the upgrade is complete. The game is back online and everything seems to be working smoothly.
Scene Object Updates
Posted by Eric DeBrosse in Engine Development on December 7, 2009
I’ve been making changes to the base scene object. Now there is a flag that you can use to render the current scene object after all of the children have been rendered, instead of the other way around. This was needed due to the way mesh skinning is performed. All of the bones (i.e. matrices used to influence the vertices) are added as children to the mesh itself. The combined transform for all of these bones need to be calculated prior to rendering the skinned mesh. A new object called a Matrix Palette was added to the mesh scene object. It’s used to setup, and update, all of these bone transforms.
For the blend indices, we need to compensate for the lack of UBYTE4 on older hardware, so we use the UINT32 data type instead of UBYTE4. In the shader hardware it’s going to end up being interpreted as a color and converted into 4 floats, instead of a single 32-bit integer. Thus, we will need to swizzle and scale the components back into the original 4 unsigned bytes. This really feels like a serious hack to me; but after hours of searching the Internet, it’s apparently the only way it can be done using older hardware.
Some small changes were made to the helper functions that handle vertex declarations. There were some instances where en element would not be detected, if the data type is different than normally expected. For example, a position element may have been padded into a 4 element tuple; instead of using a 3 element tuple, the default.