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

Post

Week of September 15, 2013

#1
Sunday, September 15, 2013

Summary

A solid day of many different focuses :)

I did some really nice conceptual work today on AI. The biggest remaining problem left to solve in AI is "faction reasoning." I'm not going to lie, I've been hiding from that one a little bit :oops: But after finally thinking long and hard about it, I came to the realization that the only real remaining problem is actually just "delegation." The AI needs the ability to understand delegation - offloading tasks onto others. After exploring this concept for a bit, I started to understand that it's one of the most crucial concepts to the LT AI. Not only does it form the entirety of faction reasoning, but it also forms the entirety of mission generation! Delegation to subordinates (so-called "faction reasoning") is completely symmetric to delegation to strangers ("mission posting")!! Wow, awesome! So really, we just need to solve this problem and then both factions and missions will be in order. I've already got some nice insights and ideas in this arena after today's thought session, so I'm both happy and excited to break down this final barrier :D

After some internal debate, I've decided to go with a full-blown window-based UI (rather than the semi-automatically-managed thing that you've seen previously). To that end, I started implementing legitimate windows today :geek: So far I've got draggable, resizeable windows that snap to a grid and to the sides of the screen. There's still a lot to do though, as I'd like to implement snapping to other windows, hotkeys for fast docking to half or quarter screen sectors, and perhaps even a fast multi-window automatic layout algorithm. Frankly, there's not a single operating system that I've tried to date that hasn't disappointed me in some way when it comes to windowing. I'm thinking this can be a fun opportunity to implement everything that I would want in a window manager :D Not that LT needs to look like a full OS, but I think it's critical that managing information and interface-based interactions should be as fast and intuitive as possible.

Oh! And I fixed / finished pathfinding. It works now ;) Hoping to finish the abstract "go to" event tomorrow! :thumbup:

PS ~ Aaaaaand sorry for another weird log time :problem: Really should have written it before bed again like last night, but fell asleep accidentally :lol: :shock: :oops:

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of September 15, 2013

#2
Monday, September 16, 2013

Summary

Really another model day when it comes to the practical / conceptual split :) Two focuses: depth pre-pass and abstract movement. One shiny, one not. Both very important ;)

I never really explained what a depth pre-pass is, and I don't intend to...but suffice it to say it's an implementation detail of the rendering engine that allows both efficiency boosts and, more importantly, is critical for light indexing. It also helps with lens flares and god rays. So it's an all-around Good Thing to have :geek: Today I implemented it, and also went ahead and modified lens flares so that they reap the benefits. I never thought much about it before, but now I realize how elegant it is to separate the depth and color passes. Not only does doing a depth pass first give you an excellent tool for use with other techniques, but it also makes the rendering pipeline simpler. I'll spare everyone the gory details, but some of the shader code has been simplified quite a bit :)

The biggest advantage of this pre-pass is going to be significantly more accurate light indexing, which should be the last big boost I need to make the dynamic lighting in LT look great with a large number of lights. Making the changes is going to be a pretty involved task, and I'll probably need another day or so to really nail it, which is why I didn't do it today. But we're darn close now :)

As for abstract movement, I didn't get too far, but there's honestly not a whole lot to do. I've already got the path computation, as per yesterday's work, and today I just wrote the routines to interpolate an entity along that path. That's pretty much all there is to abstract movement! Instead of navigating using actual physics, an object just gets transported along the desired movement path, taking path cost and time into account. I haven't tested it yet, as I'm waiting on one more bit of math to come in from math Josh, who's currently in his room with the old pen and paper. He should be finished soon, and then we'll be able to proceed with testing! :monkey:

Hey, with movement and docking almost in place, it's not going to be long before the AI is ready to do some real thinking! I'm really optimistic about this month :D

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of September 15, 2013

#3
Tuesday, September 17, 2013

Summary

Yep, another great day!! :) Seem to be getting a lot of those this month :geek:

Graphically, I spent energy in a few places. First, I'm still working to make the windows awesome. I won't lie, they're pretty much there ;) They now include attractive close and resize buttons, and a subtle dithering effect so that they don't suffer from color banding (attention to detail, you know :monkey:). I'd take LT's UI aesthetics over any of the OSs that I'm using at the moment :) I also implemented Windows-like snapping to half-screen sectors. My plan is to keep building more and more neat functionality like that until someday I end up with an awesome windowing system :D

Naturally, there was also some work on fog and the fog model. That one's become such a classic by now that I'll probably be saying that until the day I die. And on my tombstone: "Josh Parnell ~ 1991-2073 ~ Still working on his fog model" :lol: But seriously, it looks even better after today.

On the simulation / AI front, the go to event is now legitimately working, and it was pretty thrilling today as I watched an NPC navigate to another system using a warp lane and then a jump hole (note that it also performed a hypothetical simulation before doing so)! Great!! Full-speed ahead with more complex AI interactions :cool:

Finally, I finished implementing the linked list construct that I'm going to use to clean up the representation of contexts. I started doing the replacement today and I'm really excited about how beautiful the syntax looks! It's going to simplify a lot of code but, more importantly, provide the guarantee that a deleted object will be immediately removed from its context - a guarantee that vectors just can't provide. And, on top of all that, I expect to see a 10-15% increase in performance thanks to not having to worry about dangling deleted objects :)

Still have very high hopes for this month..and even this week! So far, things are looking up :D

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of September 15, 2013

#4
Wednesday, September 18, 2013

Summary

Not really too much going on today, but at least I got the main thing accomplished: linked lists for contexts and immediate deletion!

As I've mentioned over the past few days, this is a pretty big architectural change that I've been considering for a while. I finally decided it was worth it, and figured out most of the implementation yesterday. Today I figured out the final bits of implementation and did it! Since it was such a major change, many lines had to be rewritten, but a lot of them are now shorter and cleaner. In addition, I feel a whole lot more comfortable now that I know that when an object is deleted, it is immediately removed from the world in every way.

The final bit of insight is worth mentioning, since it requires a moderate amount of technical cleverness. The last remaining problem I needed to face today was: what if you delete an object while you're iterating over it? Traditionally, this would mean that you need to delete the object using the iterator. But that's not good enough. I might want to delete the object from somewhere deep within the object code with absolutely no idea of what may or may not be iterating over me. Furthermore, I want to immediately delete all references to myself. It follows that we need a way to track and "repair" iterators that are invalidated by removal. My solution is, as I mentioned, moderately clever: an internal linked list of iterators, residing within the iterators :D Go figure, an internal linked list within internal linked list iterators ;) The result is pretty great: no dynamic memory (the list is stored entirely within the iterators and a single global pointer), very fast construction and destruction of iterators, and immediate removal of elements with automatic repairing of affected iterators! I'm very pleased with this solution :monkey:

After a bit of twiddling, the solution worked on the second or third try, which is pretty great for such a technically-involved change! Hooray :D

Honestly, it feels awesome to finally have this in place. So much simplification, so many lines of code obliterated, and more stability and performance as a bonus. Slowly but surely, the LT codebase is disappearing ;)

Seriously, I joke about it a lot, but I think it's actually really interesting: the LT codebase is now at 65K lines, and I can't even remember when it passed the 60K mark...I'm pretty sure it was a long time ago :think: It seems that the better I get at coding, the fewer lines I code and the more lines simply disappear!! Maybe I will be able to write the whole game in 70K :shock: That would be awesome :D Here's to many more..er...fewer...lines of code :thumbup:

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of September 15, 2013

#5
Thursday, September 19, 2013

Summary

Not too much going on today: I stuck to the laptop all day, which inevitably led me in the direction of performance optimization. The performance on my Mac is suffering a bit this month with the new volumetric rendering + dynamic lighting systems, so I should probably spend some more time with the old optimization wrench :geek:

My most impactful change was factoring out culling into a separate pass - it was kind of dumb that I didn't do that in the first place, but I never thought distance or frustum culling would become a bottleneck. With all these asteroids on screen lately, my profiling has been indicating otherwise (I've mentioned this before in the context of needing a hierarchical scenegraph). Much to my excitement, implementing this separation ended up killing off a fair amount of complexity in the rendering code, as well as providing a speed boost. Always love a good 2-for-1 deal :thumbup:

I also rewrote the chromatic aberration shader in a more eco-friendly manner, so it's gone from consistently being in the top 5 elements on my profiler to being somewhere in the low 20s. Nice :)

Finally, I tried a failed experiment in speeding up the antialiasing. I read about an interesting new type of AA today - "DLAA" - it's super hacky but really appeals to the "intuitive" side of me. And...sure...I'll be honest, the fact that it was invented specifically for a Star Wars game might have played a roll in my interest :roll: Anyway, I tried it out, and I'm pretty sure I didn't get the implementation right, because it looked bad and didn't perform as well as FXAA :shock: Guess I need to read it again :oops:

Today's work was good, but I need to get back to the AI front. That's really where the rest of this month's action needs to be. It's a tough balance since I do really need to keep an eye on performance...but getting some life going on in the LT universe is probably more important :D

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of September 15, 2013

#6
Friday, September 20, 2013

Summary

In a world where the dev team of Limit Theory still had energy to spend on a dev log, the opening to this one would no doubt be gripping. In this world, it's really quite plain: today sucked. :shock:

What Should Have Happened™
  • "Best day of the month." An early start, a full day dedicated to nothing but the trenches of glorious artificial intelligence. Major progress on all levels. Navigating working hand-in-hand with docking working hand-in-hand with trading. NPCs taking broad goals and churning out real plans for achieving them. Life in the universe. The start of something beautiful.
What Did Happen™
  • "Worst day of the month." A normal start, an early meeting with a technician for the fourth repair attempt on a laptop that has been out of commission since July. Shortly thereafter, an attempt to log on to our very own forums...and the alarming realization that they were down. A hasty update of payment information, a call to the billing department, and the comforting news that the site would be back up within an hour or two.

    A surprisingly-calm intermission wherein I succumbed to the belief that maybe, just maybe, the day might be recoverable. A remarkably-fallacious belief.

    A several-hour-long battle with the graphics drivers on the newly-repaired laptop, attempting to reconcile nvidia and ubuntu on this particular machine. A spectacular failure, a clean wipe and fresh Windows install with nothing to show for it but a pocketful of wasted hours.

    A growing suspicion that the host had pulled "one to two hours" out of it's corporate rear (it had been seven hours with no visible change). A grumpy call to tech support followed shortly by the startling realization that the lie was not a lie and, indeed, everyone else in the world could now access my domain but me. A long bout of fiddling with DNS caches and, in the end, a melancholy acceptance of failure. The confusing and totally-underwhelming discovery that my only method of accessing my site is currently through tethering my phone. An unwelcome rush of nostalgia, recalling those first few weeks wherein my lack of real internet kept me eyeing every KB of bandwidth on the blasted phone.

    A bead of sweat on the brow as all this frustration seemed to generate quite a bit of heat in the living room. No, really, it's way too hot. The uncertain but sinking feeling that perhaps central cooling is malfunctioning. The rock in the stomach upon examining an unusually-loud condenser unit whose fan was clearly no longer working. The utter joy of looking forward to the pleasure of dealing with repairs.

    A regrettably-negative dev log, but perhaps a few redeeming streaks of dark humor and an undeniably-impressive volume of compound adjectives. A small crowd of disappointed yet mildly-sympathetic readers :shifty:
What's Going To Happen™
  • A prompt DNS cache update by my ISP and the subsequent recovery of my ability to visit the forums!

    A visit by an upbeat and totally-fair cooling specialist who notes that the only thing broken is a $5 capacitor and offers to replace it for nothing more than the satisfaction of the job and a bottle of ice-cold water.

    A stunning finish to September, wherein the game reaches feature completion :D
---

Hey, the way I see it, since this day has been unrealistically bad...who's to say that the rest of the month won't be unrealistically amazing? ;)

Looking forward to a fresh day :shock: :)

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of September 15, 2013

#7
Saturday, September 21, 2013

Summary

Bahh sorry for another dev log timing failure! Yet again my sleep schedule fell smack-dab in the middle of the usual dev log posting time, and I failed to get it done before succumbing to the old sleep monster :oops:

It was an absolutely fantastic day for AI, and overall a much better day than yesterday :D

Today the ideas were rolling, the code was rolling, and it was generally just a good day to be alive. In the morning I wrote a new AI planning algorithm capable of significantly more depth than my previous one. I came to a much more solid understanding of how to perform intelligent reasoning and...I'm actually really confident that this algorithm is going to work wonders!

I also implemented it!! In full! :D

I'm still refactoring a bit of the AI in order to clean up and separate out a few concerns, but I should be able to test the new algorithm shortly.

I also thought a lot about delegation, and I'm very proud to say that I think I finally understand it! I've re-framed the problem in terms of an action, just like everything else, so that I'm looking at delegation as just another action. This means that it fits into the reasoning algorithm effortlessly :D I haven't implemented it yet, but I'm thinking it's actually not going to be too terribly hard to do. And when it's done....wow....I mean, that'll be it....we'll have factions, we'll have missions...we'll have a universe full of life!

The month is definitely turning out to be great for AI. My only hope is that I can make enough progress to have something really "demonstrable" for the monthly video ;)

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of September 15, 2013

#8
Week Summary

General Sentiment

It's hard to choose, but I'd say the real winner of this week was...artificial intelligence! :o Yep, there may have been some exciting windowing action, maybe even a bit of depth prepassery. But the very first day of the week brought a huge conceptual breakthrough that clears up a lot of my confusion about how factions are supposed to work, and the last day of the week marked the beginning of a long and awesome foray into "real AI" and a shiny new planning algorithm. And I think we should celebrate that :squirrel:

Major Accomplishments
  • Implemented depth prepass
  • Implemented abstract & concrete "go to" using pathfinding results
  • Implemented lens flare occlusion (using depth prepass)
  • Started working on a window-centric UI
  • Replaced context vectors with internal lists...awesome and clean new design!!! :geek:
  • Finished and tested AI pathfinding
  • Significantly improved performance of culling
  • "Delegation" theoretical breakthrough - unified and clear solution to both faction reasoning and mission generation!!
  • Rewrote the AI's primary planning algorithm from scratch, employing secret and magical One AI Algorithm to Rule Them All
  • Survived the Friday from Hell aka September 20th :roll:
“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 6 guests

cron