About this blog
Senior Graphics/Art Tools Programmer at BioWare Corp. Also author of Game Engine Toolset Development
Entries in this blog
After a long wait (sigh, I need to really figure out how to invent a time machine to infinitely work on side projects) I finally have my book's companion Web site back online (http://www.getdbook.com) - Sorry for the inconvenience! I am now hosting the book material (including the 2 bonus chapters) on my site so you can avoid the publisher site now.
http://www.wihlidal.ca will be coming back online once I finish overhauling the content on it and bring everything up to date.
On a somewhat related side note, I am playing around with the idea of writing another book. Everything from a revision of Game Engine Toolset Development for .NET 3.5 and XNA instead of MDX, all the way up to something totally different.
Any ideas? What would you like to read about these days that is related to game development, C#, graphics, optimization, tools, etc.. ?
After a long long time from my last post, I'm finally back and can't wait to start posting again :)
Just finished Mass Effect crunch and the game is amazing. For everyone getting it, I hope (and know) you'll enjoy it!
Happy to be back,
Just thought I'd post about what I've been doing lately. I'm on my last few days with my current employer before I finally start working at BioWare! I've been waiting much too long to start there, as they wanted me May 1st but I asked for end of May so I could do some crazy knowledge transfer and wrap up activities at my current job. They were more than accommodating which made me feel a lot better about it all. May 31st is my last day at the current job and then I go on a four day fishing trip up North with my dad to serve as a nice break. Then I get back on the Sunday and start work at BioWare on the Monday (June 5th). I'm VERY excited and can't wait to start. I think I'm now on the Unreal Engine 3 tech stream there so I'll be doing some engine and tools modifications to UE3 and also creating and maintaining some new tools. I'm also working on a VERY cool game but I can't say what it is :)
Still working on getting a bunch of side projects and code files released on my Web site. It's a slow process since I have to find all the good pieces and clean them up, but in the end I think everyone will have enjoyed the wait.
Again, if anyone has a LinkedIn account (www.linkedin.com), my email is graham at wihlidal dot ca
Book has been doing very well, and I've been getting excellent reviews. Thanks so much to everyone that picked up a copy. I hope you all enjoyed my book as much as I did writing it!
Finally started beefing up my LinkedIn account (http://www.linkedin.com)
If anyone has an account feel free to send an invitation my way.
Just wanted to stress again how pumped I am at my new job. I've always wanted to get in there. Now I just need to clean up my massive number of side projects and probably release them OS to the public.
Forgot to mention that last Monday (April 10th) was my birthday, and conveniently that was also my last interview with BioWare. So basically I got the coolest birthday gift ever. :)
I start on June 5th!
Well, I was going to post about my last interview, but today I was given an offer for BioWare (Edmonton) that I'm definitely taking!
I'll be an Art Tools Programmer on Dragon Age and also on the BioWare Eclipse Engine.
Was supposed to start beginning of May, but I'll probably go end of May in order to finish up some current project obligations and do a knowledge transfer. I handle three roles at my current job, so I need to transfer each role to a resource. But, no complaints!!!!!!
Well, I passed the technical exam because BioWare asked me to come back for another interview with all the different teams!! Obviously I cannot speak about what was on the test or the interviews, but it's no walk in the park :)
Well, I had 1 formal interview with the Director of Programming at BioWare during GDC, and a slew of informal ones with various developers there as well. Now I'm back home and have booked my next official interview (3 hour technical exam) for this Saturday. Wish me luck!
Just wanted to say...GDC was awesome. Got invited to a bunch of private parties, the sessions were decent, and the roundtables were wicked! Didn't walk away with much new knowledge at this year's GDC, but the networking opportunities were crazy!!
I've had a constant hang over the whole time, but I'm not complaining :)
I even managed to snag an interview with Richard Garriott (Lord British), so expect a write-up on that and my other events shortly!!!
Just as a little update:
Well, book is making great progress through the editing stage. Roughly 31/49 chapters are edited, and the process is going by quickly. It's tricky to make sure that math equations get formatted and printed correctly, but it'll work out. Book is scheduled to hit printers on Feb 14th, and probably hit shelves within the first or second week of March... just in time for GDC!!!
I've been working on a little side project the past weekend, and figure I'd announce it now; though it's not complete yet (about 75 percent).
I call it GamePack, and it's a media archival solution for the numerous game asset\content\config files spamming the file system of many games out there. It's basically a super duper WinZip for game developers (though it could be used for any software application). The editor is written in C#.NET 2.0, though the format will be open, and I will supply a loader for both unmanaged and managed code. I even have a demo working where I host the CLR inside of an unmanaged C++ app and call in and out of it like a sandbox. Works really cool!
This format supports optional compression at the file level (allows great configuration depending on the size of the file, type of the file, and how often is accessed). I may also support some level of encryption, though I don't want to go too nuts as too much encryption will bog down loads. Perhaps the editor project will be the only part that is encrypted. I also checksum the project and entry files to identify data corruption and minor alteration attempts.
More info of this cool utility will follow, and I'll either release it super cheap (like 20 USD per license with source) or free but closed source. Maybe both options.
Here is the splash screen:
And here is the main interface so far:
Lots to talk about. Work has been nuts the last couple months, and with the finishing off of my book (that's right, it's done!) I had no time to post here. Now the book is in the editing stage and awaiting publication. So needless to say I'm extremely excited, and relieved that I can once again have a social life :)
Was playing around with the ASP.NET 2.0 publishing wizard and ended up nuking the sub directories in my web directory for wihlidal.ca, so I ended up destroying my diary images (hence why none of them load anymore). I am going to slowly repair the images as I search for them amongst a span of about 20 backup DVDs. Argg!!!!!
As for projects, I am working on something right now that is almost finished, but it's a surprise! :)
Passed my third exam and was given MCAD certification (Microsoft Certified Application Developer).
Work has gone into solid crunch time right now, so I'm taking a break from exams for a couple weeks (also to work more on the book) and then I'll finish my two remaining exams for my MCSD!!!
Finally heard back from BioWare about permission to use some media in the book. Got a nice reply from them and a contact at Atari to continue on up the chain of command :)
I've got my last MCAD exam on Monday! "Developing Web Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET"
Today I took the "Developing XML Web Services and Server Components with Visual C# .NET" exam and scored really high on it! One more exam and I'll have my MCAD certification, then I'm after MCSD.NET! :)
Hmm, so much to talk about, where to begin?
I've been doing a lot of work on the book, most notably on the distributed computing, asynchronous input device polling, plugin system, object model automation, dynamic code compilation, and code access security chapters. Below is a work in progress prototype of the distributed computing demo. The second image shows how pinned my processor is, it's obviously supposed to be run over multiple CPUs :)
Ray Eltham (developer on EverQuest at SOE) is putting together a computationally expensive algorithm to calculate mesh lighting, and I want to use it with my distributed computing framework. (Thanks Ray! I owe ya!)
I'll run a benchmark on my local machine without it, and then distribute the work across 15 2.8ghz P4s and get the benchmark difference in time.
The rest of the demos are coming along nicely. Took a lot of refactoring, but I finally have secondary AppDomain loading of my plugins without any leaks.
Taking my 2nd last exam for my MCAD certification right away. I'll let you know how that goes!
Until next time!
I wrote the Microsoft 70-316 exam today and passed with flying colors!
It was pretty difficult, the exam is progressive so it finds your weaknesses and attacks you. 42 multiple choice in 3 hours.
I was shaking when I pressed the End Test button. But yay!
Time to get ready for the next one, not going to stop until I get my MCSD.NET certification. And then after that, who knows!
I have been very busy with work lately, but I have been doing some great work on the book. Aside from finishing some other topics, I finally had the chance to revisit my texture browser control and finish it off. Here are the latest changes:
Ported it to .NET 2.0
Restructured the architecture and internal design
Improved the loader interface to support streaming
Implemented an awesome caching mechanism
Allow for images to come from the file system, bitmap objects, or raw binary data
Implemented the ability to switch between loaders at runtime
Improved the user input and resizing control, implemented multi-selection
It has a pluggable loader interface, but the example for the book comes with two versions: Native GDI+ and Managed Direct3D. GDI+ is obvious, as it just uses System.Drawing and System.Drawing.Imaging. But the Direct3D one is quite clever. It creates a reference device using the window handle of the texture browser control and uses that to load textures like DDS, DXT, etc.. Afterwards the device can be disposed of if wanted. Being a reference device, hardly any resources are consumed by Managed Direct3D and there is no real performance difference between the GDI+ version and the Managed Direct3D version.
Finally, here is a screenshot to whet your appetite!
Yay, I've booked my Microsoft Certified Application Developer (MCAD.NET) exam for the 15th, and I hope I get it. I'm under the impression I'll have enough time along with work and the book to study! :)
Wish me luck!
Finally finished the splash screen and loading dialog topic. I think the code is quite elegant, and requires no multithreading to process jobs behind the scenes, which is a good thing :)
I think my next goal is to finish the topic discussing deployment using Microsoft's new ClickOnce technology that was introduced with .NET 2.0.
The book now targets .NET 2.0 exclusively, so I intend on covering a lot of the really cool stuff that hardly anyone has even heard of yet :)
It's been a long time since my last entry, and for that I apologize! I've been extremely busy lately on both work and the book. Things are going good though. I got the latest .NET 2.0 Architect beta from work and have almost finished porting all the examples over. I figure that it is a wise move to make the target .NET 2.0 so that it has a longer shelf life and value when it hits shelves.
I've finished a number of topics since my last post, but here's an image to whet your appetite. It's from the loading screen topic that shows how to build a reusable splash component that can be used to either spruce up the visuals of your apps or to block application access while asynchronous jobs finish completion.
I will start posting again, I promise!
Well, first deadline is this Tuesday, and I am pretty confident it will be great. We'll see what the publisher thinks ;)
No comments for the texture browser control? :) C'mon!
Well, it's been a bit since I've posted any new tool functionality screenshots, so I figured that I might as well give some fresh content to the masses!
I've been wanting to build this type of control for a while because I feel that it gives an aesthetic look to any UI that offers texture selection. Right now the images are loaded using the native OS calls, but I am going to abstract the data streaming to also use Managed Direct3D to load images if needed (compressed DDS for example). I also want to build in a caching mechanisms to limit redrawing and reloading as much as possible. A simple prototype is already in place but I want to expand on it.
I called it Material Browser, even though it currently does not offer much more functionality than a Texture Browser. I may or may not expand on the control, but regardless, if I made a material browser control it would just be a composite of texture browser.
Anywho, going to get back to work. Also off to the first showing of Star Wars tonight, I have high hopes, it better be good!
Lastly, the book writing is going steady and great. First deadline is approaching quickly (May 31 for 25 percent).
Wow, I've been meaning to contact Artificial Studios for my book for quite some time, and I was going to procrastinate and get to it next week.
Thankfully, I finally contacted Tim Johnson on Wednesday night and got a permission contract signed to use some media in my book about their products. Well, I was shocked to see they were purchased by Epic Games the following morning, but relieved to know that I had slipped in right under the radar just in time!
Tim Johnson is a great guy, and I'm glad everything is going well for him.
Ok, well. I was going to make you all wait a bit more before any new content, but I had to show the new custom icons a fellow colleague of mine made for the interface designer. Let me know what you think of the new designer and icons!
Sorry for the lack of posts lately, I've been super busy with work and making sure I make the book deadline :)
Please be patient!