Wednesday, March 23, 2011

CIS 565 : Final Project


Rendering game worlds has always been an interesting topic in computer graphics. Rendering massive worlds, with relatively lower or no load times has been a very interesting challenge that the online gaming community has been posed with. With more and more internet games gaining popularity, the demand for better looking graphics paved the way for WebGL. This project aims at rendering massive game worlds with non-noticeable load times. This makes the game world seems huge but only a portion of the world is loaded into memory as network latency, bandwidth and load times are important issues that affect game play in an online game world. This project attempts to render such an extensive game world in first person view, in a seamless fashion.

I have broken down the implementation into threee major steps.
  • Segmenting the game world: The game world would be a city, generated using CityEngine. This city would then be exported as a Collada file and imported to Maya. The city would have to be segmented into multiple grids. The dimension of the grid size for each grid would be something that depends on load times per grid and how much load a web-worker thread would be able to handle. Segmenting the world and saving them out as a separate Collada files would be done in Maya using a MEL script.
  • Deciding which grids to load: The game would set to a first person camera mode. So the initial grid(s) for the game would be loaded on launch. The decision as to what grids to be loaded would be based on a few basic tests, including view distance and occlusion.
  • Pre-Loading the next grid: For seamless game play, parsing and loading a grid into memory should happen without the user’s noticing. For this, it would be essential to figure out a way to know in advance which grid we would have to load next. Once we know that, parsing and loading the file into memory could happen on a separate web-worker thread.
Personally, Unfamiliarity with the framework is definitely going to be a challenge for me. I have not worked much with JavaScript, WebGL , or any features of HTML5. Getting a good grasp of these technologies and associated concepts is time is going to be crucial. Finding a suitable compromise between load time and JavaScript speed is also an interesting challenge.

To speed up my development process, i'm considering a few third party WebGL libraries. SpiderGL and PhiloGL are two front runners. I'm going to do some poking around their libraries and samples later this week and decide on a library that i will be using for the rest of my implementation.