Return to “[Archived] Daily Dev Logs, 2012 - 2015”


Week of January 27, 2013

Sunday, January 27, 2013


A very happy start to what I hope will be a great week. Yesterday I mentioned ripping out a lot of the rendering core, and today, thankfully, I have fixed it all. Everything in the engine now seamlessly supports these wonderful new scalar field models! I've also implemented a simple level-of-detail system for them, since these kinds of models lend themselves perfectly to really nice LOD schemes. I'm happy to say that everything is working beautifully! I've replaced nearly all of the models in the game with this system, and they're all scaling very nicely.

There's still a lot left to do. I mentioned GPU scheduling yesterday, but I didn't get around to it today. It's one of my high-priority items, so hopefully I'll knock it out today. I also need to do some intense profiling and try running this on my less powerful systems, because I must excited as I am about this technology, I do have some concerns about the vertex density of the models that it produces. I won't lie, it's very heavy on the poly count. The good news is that it can be scaled down to any level you like (which makes it more scalable than virtually any other kind of modeling technology). So you can definitely run it at some quality on virtually any machine. The bad news is that high-quality models require a fairly high triangle count. I'm hoping to combat this issue with aggressive LOD schemes, perhaps even mesh segmentation and fine-grain culling, to prevent rendering of pieces of the model that aren't in view (this will be especially effective for large ships).

Despite the high poly count on these new models, I have been impressed with how well my collision algorithm is handling them. Nonetheless, I may end up not needing it now, as it would actually be almost trivially easy to perform collision detection on scalar field meshes on the GPU, so I have a feeling that I can probably cook up an even faster physics engine in a day or so.

I made yet another leap forward in ambient occlusion today, as I realized a much, much faster way to compute it. The new method yields about 8x - 10x performance gain, which means the engine can now compute beautiful AO with no perceptible sampling artifacts in less than half a second. Finally, I am happy with this performance :) In addition, I figured out how to solve some issues related to AO at low level-of-detail, so now my low-LOD models still have perfect AO, which makes the LOD transitions less perceptible.

A few more hours of playing around with the ship generator today brought some really exciting advances :D I am so happy, because I've been trying for ages to get the metal to look right...and I think I finally got it!!! I'm finally happy with the shaders on ships, and I feel that they're really quite nice! (I'll admit, turning up the occlusion helped.. ;) ).

At the moment, I'm working on replacing all the remaining models, including turrets, thrusters, and (possibly) stations to use the new model system. Along the way, I'm having to develop a bit more math to create the fields for these objects, but it's all great fun.

I'm honestly really, really excited about all these recent developments. Last week, I was slightly worried, because everything was kind of in disarray as I was trying all of these new, transitional things...but I do think that I'm going to have most of it wrapped up and ready to show for the monthly dev video, which will really be wonderful, because I want to do justice to all the progress that LT has made in the past month!!!

Hour Tally

Coding: 5.42
Internet: 3.89
Testing: 3.21
Total Logged Time: 12.52
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of January 27, 2013

Monday, January 28, 2013


Every now and then, you get one of those days where it's just on earth did that take me so long? I'm sad to say that today was one of those days :(

I spent the entire day crafting up that GPU scheduling engine that I've been mentioning. I really thought I could pull it off in much less than a day. But I did end up doing a quality job of it, so at least the result is nice. I can submit jobs to a GPU scheduling queue that executes them based on a dynamic priority, but always keeps in mind the framerate, and tries to minimize framerate loss. It automatically detects "hard" vs. "easy" jobs, and tries to calculate exactly how much of a given job it can perform in the allotted time. I also went ahead and wrote the CPU multithreading code, which was necessary to allow all of the scalar field model generation to be performed in the background (since the triangle-emitting algorithm runs on the CPU). So the engine is now able to use threaded jobs.

The result is great, because I've got jobs executing in the background and the framerate stays smooth. It's also able to finish them much faster than I would have expected...but that's probably a perceptual thing, because time feels reaaaally slow when you're staring at a loading screen, but sails by a good bit quicker when you can actually fly and shoot while things are loading.

So now, rather than long load screens, I'm seeing a low-detail version of the models at first, and then higher-resolution versions pop in as they become available. It's not particularly pretty, but it beats a load screen. The more important part is that it will prevent stalling in the game. For example, if a ship jumps into your local system and is the only ship of its kind in the system, the engine will need to load the assets for it. Without any kind of background generation technology, the result would just be a nasty freeze that could last a second or two. With this system, you'll see the ship immediately! Unless you happen to be right next to it when it jumps into the system, you probably won't even notice the fact that it's getting more and more detailed.

All this work has me feeling really good about having gone down the scalar field route. It's a bit of a strange path, and very few games travel it...but I think it will end up being one more thing that makes LT a good way! The more I deal with this technology, the more I realize how much sense it makes. It just makes sense!!! :D Everything is so natural. The only thing that isn't natural - rendering - is only unnatural because the way modern GPUs render (rasterization) is completely unnatural. If we had GPUs that were specialized for raytracing (which is really the "natural" way to render), it would all be too easy, and I would be able to completely drop triangles. I really hope we see more exploration of this technology in the future...and I hope that LT can be just another demonstration that it is feasible, practical, and all-around a good choice!

The next two days are going to have to be really beastly. Wish me luck :geek:

Hour Tally

Coding: 7.64
Internet: 2.11
Testing: 1.11
Total Logged Time: 10.85
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of January 27, 2013

Tuesday, January 29, 2013


Ah, the end of the month.

That magical time when you gaze upon your wondrous game and marvel at all of the beautiful technical accomplishments that have taken place over oh-so-many late, caffeinated nights. The silky smooth feeling of 60 FPS under your fingers, the mathematical miracle of scalar fields pumping life into those implicit surfaces, and the algorithmic wonder that sends you bouncing off of hard surfaces with a glaring lack of serious repercussion. It's like Christmas all over again. And then, it hits you...

Wait a minute...from the outsider's perspective...does it even look like I've made any progress?!?!?!?!

And then you realize that all the things that matter to people - those numerous little details that take two-and-a-half seconds to implement and half a second to break, are all broken because of major overhauls to more important things. The invisible things.


So that's how I spent my day...fixing all (or most of...) the little things that I broke over the month since I was too concerned with bigger things. At this point, I believe everything's in working order to demonstrate!

It really is strange how disconnected "cool" and "difficult to implement" are. Often times, people want things that are, to be honest, pretty easy to do. It's the things they don't really care about - the things that they just "expect" to work - that are hard. Some people marveled when I built that ship editor in a day during the KS campaign. But seriously, I can't even begin to express how simple that thing is compared to...well, compared to any of the major systems that have been developed over the past few weeks. The ones you don't see.

It's an interesting predicament, but critical to keep in mind for anyone who wants to make a game and not just a game engine. I want to make both. This month, I'll admit to having walked further on the game engine side than I probably should have. But it's still early, and the more great tech I invest in early on, the better the game will be, and, perhaps more importantly - the more tractable the entire project will become.

PS ~ Please don't think that I'm trying to set you up for disappointment...despite my ever-critical assessment, I do think the visuals and "cool" things have come quite a long way in a month, and I hope you'll agree :)

Hour Tally

Coding: 4.95
Internet: 2.69
Testing: 2.60
Total Logged Time: 10.24
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of January 27, 2013

Wednesday, January 30, 2013


A flurry of activity, centered around creating a shiny new video for you all! I hope you like it. I sure do...actually, looking at this, I'm really, really happy with how far LT has come in a month. IMO, it doesn't even look like the same game (graphically) :) But of course I'm biased.

In terms of actual code accomplishments today, obviously there wasn't much, but I did significantly improve the scalar field engine in a few different ways. It led to increased generation performance and better LOD switching. I am a bit concerned about the LOD quality for ships, as I am noticing important details of ships being lost at a distance. Still, I think I will be able to improve this by augmenting the field-to-triangle conversion algorithm. That'll be some nasty work for another day :? I also improved the AI collision avoidance algorithm, which was a bit too cautious previously. Finally, I enhanced the postprocessing shaders a bit to give a more colorful, contrasty tone. This will be optional, as some people will probably find it too dramatic, but I enjoy a colorful universe :D

Anyway, I hope to have the monthly Kickstarter update + video out tomorrow around midday, so look out for that! :)

Keep in mind that hours don't include video/audio editing, which took a lot of time today :|

Hour Tally

Coding: 2.68
Composing: 0.67
Internet: 1.68
Testing: 3.67
Total Logged Time: 8.70
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of January 27, 2013

Thursday, January 31, 2013


A very enjoyable day, although not for the usual reasons! I spent the wee hours of the morning getting everything wrapped up for the monthly update. After shipping it out, since the general consensus seemed to be that I was fairly productive this month, I decided to give myself the day off :D Indeed, it was the first full day off that I've taken since the Kickstarter ended, and I think this is a good reward for a hard month's work. I plan to make it a tradition after sending out the monthly update.

So, of course, I spent the day regenerating in my Borg alcove, meditating in the Jedi Temple, having lunch on Naboo and dinner in Rivendell. At some point I think I may have also haggled over a few Kwama eggs at the Eight Plates (cookie to anyone who gets it without Google...). Hard to say, really, it was such a flurry of relaxation. But in all seriousness, I did do some serious unwinding with some good scifi and fantasy movies and shows. Oh, and I went outside (wait, what's that??) a bit too!

I've got my February list all drawn up. I'm going to bed early tonight, and when I wake up...I'm going to get to work on showing February what full-time game development is all about. It's time to get serious ;)

Thanks so much for all the kind words today concerning the video/update!! I couldn't ask for a better group of supporters...not only did you guys fund my dream, but you also continue to be so enthusiastic and supportive of it. I appreciate it!!! :D
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of January 27, 2013

Friday, February 1, 2013


Well, I woke up all ready and excited to get a jump on February. Sadly, as it would turn out, the first of the month had other plans for me. Significantly less enjoyable plans than I was hoping today, instead of writing about sassy GPUs or incredible breakthroughs, I'm going to have to write about a malevolent anti-virus program that will remain unnamed, and a scheming laptop which I believe orchestrated the soon-to-be-described fiasco.

The day started with a bit of light coding, and then the mail came, along with it, a lovely new bouquet of Corsair Vengeance. DDR3 flowers have never smelled so sweet. And then came the first technical challenge of the day: what should have been a five-minute upgrade to the short-term memory of my desktop turned into a one-hour emergency brain surgery when I found that the poor thing was literally falling apart on the inside :shock: Thankfully, he wasn't too far gone, and we were able to operate just in time.

Well that was fun, but the fun wasn't over yet - when my laptop saw all this special attention the desktop had been getting, it got a bit jealous and devised a brilliant plan to secure a solid half of my day. While upgrading the antivirus-which-must-not-be-named, I was presented with an offer to activate the (free) anti-theft protection system. Whether this system was a legitimate part of the AV or a clever forgery by my sneaky laptop, I still do not know...but regardless, I went for it. Sounded great. And then, it told me that I could create an account that would serve to lock thieves out of my personal data in the event of a theft. Great! No one can touch the LT code if they steal it! Sounds good. Let's do that.


Wait, hold on now, what are you doing. The laptop smiled shrewdly. "Access denied." What, what? That's my hard drive...!!?? "taskmgr.exe cannot be found." What do you mean!? I was running it a second ago??? "You do not have security privileges to access C:\" NOW HOLD ON JUST A MINUTE. This is MY laptop!!! It smiled at me again, thankful for the attention. But clearly it wasn't sufficient, because, as hard as I tried, I could not take control of my own machine. msconfig...nope. Safe mode...nope. System restore...nope. Seriously??? Dell restore to factory image....nope. The laptop remained quite content and lighthearted as I failed time and time again to access my own data. I think I caught it shooting triumphant smiles at the desktop on a few occasions.

I'll spare you the rest of the trauma. Suffice it to say, one fresh install of Windows and many hours of recovering data later, here we are. Back at square one, and LT is no better for it. Let's hope this is the last of the technical trouble for February...!

On a brighter note, I did make a serious effort to recover (pun intended.) from the terrible first half of the day. In some respects, I suppose I did succeed, given what little time was left. I significantly improved the look of the command interface, including implementing the ship icons, which look quite cool! It definitely is loads easier to control already. I also started work on the HUD, finally!

Well, sorry for the less-than-spectacular daily report...barring any mischievous laptop pranks, I believe I'll have better news tomorrow!!! :)

PS ~ I tried to reconstruct them as best I could, but the hours for today are not really accurate. I lost all of my laptop data, including the logging data.

PPS ~ Of course, all LT development material is heavily backed-up, so don't worry, I didn't lose anything code-related!

PPPS ~ Beware the anti-theft system. It works far TOO well...assuming, of course, that you're out to steal your own machine. Also beware jealous laptops.

Hour Tally

Coding: 4.33
Internet: 2.89
Testing: 1.40
Total Logged Time: 8.62
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of January 27, 2013

Saturday, February 2, 2013


Now there's the beginning to February that we were all hoping for... 8-) Today was highly productive, and my laptop seams to be appeased with all of the attention that it stole yesterday.

I worked on a bit of everything today - I'm finally starting to tie systems together, which, I suppose, is what gameplay is really all about. I successfully implemented a simple "mission objectives" HUD, along with a basic definition of what constitutes a mission. I wasn't particularly happy with how the UI looked when used as HUD elements...and that's not really acceptable, because I don't want to have one system for the HUD and another system for the other menus. As with everything else, I'd like to unify! So I worked on making the UI a bit more sleek and minimalistic. I would say that I've succeeded! It came at the cost of the glowing blue Freelancer-style menu effect that you saw in the monthly video, but, IMO, this version looks better (and is more performant). It's just simple, sleek, and black. As I keep saying, I love finding simple solutions that work well, and I think I'm just about there with the UI! This version looks quite nice when used for HUD elements, so I think it's going to work.

I'm not sure how, but this work led me to conquer one of the last remaining vestiges of ugliness in the engine: object deletion. Object deletion is always a pain in just about any application you can imagine. It's not surprising, as, if you think about it, when you go from "Hey, here's an object, use it how you like!" to "Hey, here's an object, but just FYI, it might actually become invalidated and disappear into thin air at any moment, so be careful with it"...well, that's just a whole new ballgame. For a long time, I've been putting off a formal solution to this problem, because it's just not a fun problem to tackle. I've been getting away just fine with giving every system a one-frame leeway to release any references that it's holding to an object that is about to be deleted. But I knew that this wouldn't suffice when it comes time to start implementing things like the LOD universe simulation, since not everything will be running every frame.

So today, I finally implemented a real object deletion system, in which anyone who wants a reference to an object must notify the object that they're taking a reference, and, if the object is deletable, the object will take down the holder's information and inform them if/when it gets deleted. You've probably heard of reference counting before. I implemented something similar, but not quite the same. Reference counting is a bit sloppy. Reference counting is saying "hey, don't worry about deletion anymore, we'll only delete an object when nothing else refers to it!" Sometimes that's OK, but for a game, you should probably know when your objects are being deleted, and you probably shouldn't be keeping them in memory when they've been removed from the game world just because some obscure system is still clinging to a reference. In my system, the object gets deleted, but the reference will be invalidated so that the holder will recognize that it can no longer access the object. This is clean, easy to implement, has the same overhead as reference counting, but is "stricter" in some sense. Actually, it's also lighter than reference counting when it comes to objects that aren't deletable, because, in this system, a reference to something that can't be deleted is just a pointer to that something, with no additional overhead anywhere. Cool! :geek:

With that advancement in hand (and already working quite well, I might add! :D ), I feel a lot better about the engine! I have no doubt that this is going to save a LOT of pain in the future. I would say that about 50% of "serious" bugs that I've encountered up to this point have been deletion-related (that's not I said, deletion is just a pain!) Now, however, the engine will be able to catch the problem before it occurs, because I can run it in a debugging mode where it will stop and inform me if someone tries to access an object that's already been deleted (as opposed to without this system, where that same action would just cause a crash and then I'd have to go debug it).

Finally, I wrapped up the day by starting some serious work on subsystem control. I'm going to start with the power grid interface, where you can choose how to distribute power among your systems. This is a pretty conceptually easy thing to do, and should be working quite soon (barring any major frustrations with the new UI). It think it'll be great fun to play with power routing, and I look forward to doing it! :D

Hour Tally

Coding: 6.01
Internet: 2.34
Testing: 1.25
Total Logged Time: 9.60
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of January 27, 2013

Week Summary

General Sentiment

Well, let's be honest, it wasn't as productive of a week as some of us might have hoped for. Although, looking back, the first two days were pretty awesome...the graphics did make a major leap forward with Sunday's improvement to the metal shader. And Monday's GPU scheduler was no doubt a big technical accomplishment. However, these last few days have felt a little too slow for my liking, but, then again, I spent a lot of time making the monthly update video, and then an unfortunate amount of time dealing with yesterday's technical problems. Compound that with the fact that I took the day off on Thursday, and you're left with an hour count that is a bit disturbing.

Nonetheless, I think we can all agree that LT is progressing at a nice rate. I'm just hoping that February is even better. I think it's fair to say that, if I'm doing this right, each month should be an improvement over the last. I should get more accustomed to working long hours, faster at coding, faster at debugging, and just generally better at my job! Here's to hoping for an even better February :)

Next week's goal: LOTS OF BREAKTHROUGHS. :D

Major Accomplishments
  • Massive improvement to the quality of the metal shader for ships/stations!
  • Switched all models to use scalar fields ("implicit surfaces")
  • Implemented automatic LOD system for the implicit surface models
  • Implemented background GPU scheduler, rewrote all scalar field routines to use the scheduler
  • Improved command interface graphics & icons
  • Began work on several HUD components
  • Successful first development update video! :)
Combined Hour Tally

Coding: 31.03
Composing: 0.67
Internet: 15.6
Testing: 13.24
Total Logged Time: 60.54
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Online Now

Users browsing this forum: No registered users and 1 guest