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


Week of July 6, 2014

Sunday, July 6, 2014

Bit of a slow Sunday unfortunately, as I couldn't seem to get in the zone today. Perhaps because I got distracted by flying around the LT universe :lol: I honestly haven't seen too many systems ever since the implementation of that color grading shader was kind of mesmerized as I jumped from system to system, seeing a lot of beauty that I've not seen before :shock: Ah, proceduralism. How I love you :)

Playability: Wormhole Zones

As if we hadn't already gotten enough mileage out of the recent zone tech, today I decided to go ahead and use it for one more thing. Since the beginning of LT, I've been using collision detection to initiate wormhole jumps (i.e., I would just fly right into the thing). Having used this system for over a year, I'm now comfortably able to say that I strongly prefer Freelancer's way of doing it: approach the wormhole and press a key to use it.

Today I added a zone component to wormholes and implemented some logic to provide a 'press X to use wormhole' message just like the 'press X to dock with Y' message. I stripped the collision component out of wormholes as well, since they'll no longer need to pay attention to collisions. I'm already enjoying this more relaxed and intentional way of moving between systems, and have spent a good bit of time exploring today :)

I still need to implement wormhole animations - but those should tie in nicely with warp tunnel graphics, which I started last month. If I could get that finished soon, we might finally see a dev video that shows more than one system again! :D

Imposter Tech

I gave a few more hours today to the imposters / zone LOD tech that I mentioned yesterday. I'm now able to generate texture atlases that contain renders of a given entity at a number of different angles. Now I just need to write a shader that interpolates between them based on the camera angle, and we should be in good shape to see some basic, working imposters!


Getting back in the zone tomorrow - guaranteed! :D
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 6, 2014

Monday, July 7, 2014

Yes. The zone. :D

Content: Modular Ship Generating Algorithm

It's really about that time, isn't it? With PlateMesh tech pretty firmly in place (just need a bit more texturing tech work), it's about time we started getting serious with ship algorithms. Really hope to have something by the end of July.

Today I've started building a new ship algorithm, this time attempting to do it 'for real' with a serious attempt at ship modules and layouts that make sense. Very excited about this work. Still looking for the simplicity, and hopefully can keep the algorithm fairly short, but it's just going to take experimentation. It's time to stop avoiding this sucker :geek:

Polish: Holographic Models for UI Objects

I mentioned yesterday that I really wanted to get holographic rendering back into the node UI, especially for the target display and potentially for the hardpoint interface as well. Today I did that :geek:

It was actually one of those rare moments where things just worked...I only had to try once! That's always a nice feeling (especially when it comes to things related to rendering).

Happy to have that much more beauty in the node UI! The HUD target widget is already looking great :)

Imposter Tech

Still working on it. I'm working on writing the shaders now! Not trivial but should only take a few more hours before we see something working. I really wanted to have this done by the time I posted the log, but looks like that's not going to happen :( Perhaps tomorrow??

Decentralized Buy / Sell Orders

Today I've restructured some of the AI code such that AI projects no longer manage market orders directly, but rather, allow the Buy & Sell tasks (of which I spoke towards the end of last month) to manage the orders. Cleaner, more intuitive, and will give me more room to configure the way in which market orders are generated :)


Very happy so far with how I'm spreading myself in July. It's going to be a month of many focuses! :geek:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 6, 2014

Tuesday, July 8, 2014

Unfortunately, had to deal with some personal stuff today and it took time out of my work day. I'm heading home tomorrow for my once-every-few-months visit with family and friends, but my car was having some trouble that I had to go deal with and get repaired today.

Anyway, besides that, I still got some exciting work done - perhaps just not as many hours as I would have wanted.

Working Imposters!

Today, for the first time, I've got these mysterious 'imposters' of which I've been speaking lately working in-game! They don't look perfect yet - in fact there's still quite a ways to go before I'll be satisfied with their appearance - but they're definitely working and they definitely look like a rough approximation of the objects that they're trying to represent. I'm already quite proud of them :)

To get here I had to do quite a bit of legwork, not just generating the appropriate textures & model, but also re-working some of the deferred rendering pipeline to support these rather strange LOD objects. Once I finished, though, the results were totally worth it. It's actually kind of awesome to see the imposters working in tandem with deferred rendering. Since they capture all of the information that a normal object writes to the render buffers, these lightweight models look remarkably similar, at least from a distance. Albedo, normals, shading model, occlusion...they output all of the same information as a real object, which means they're even subject to the exact same dynamic lighting, fog, etc. Everything just works :) Yet, at a lowly 12 triangles per imposter, they're absurdly cheap to render (and I'll probably switch to 2 triangles pretty soon).

I couldn't help but do a bit of performance testing today - I quadrupled the number of asteroids that are generated within a zone, but I switched them all to imposters instead of full models. The frame time went down from ~17ms to ~11ms (lower is better). Yeah, that means we got 4x as many asteroids and still picked up a significant boost in framerate :cool: I knew this would be worth it!! I still need a way to transition between the full model and the imposter, but already the performance ramifications are clear: it's going to be epic. Oh...and I didn't even batch them yet. Batching is going to be a huge boost - I'll be able to draw entire zones with remarkably few triangles and in only a single draw call. Your GPU will love it :lol:


Tomorrow, as I mentioned, I'll be on the road back home for most of the day. It'll be a good chance to get some theory cranked out, assuming the road doesn't take too much of my concentration :roll:

Really feeling that July is going to be a month to remember. Let's keep it going! :geek:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 6, 2014

Wednesday, July 9, 2014

Made it home safely, despite the huge amounts of rain trying alarmingly hard to lift my car off the road :shock: :lol: :ghost:

Thanks to the low amount of traffic on the road at midnight on a Wednesday, I was actually able to let my mind wander and get some thinking done on LT! I wandered through such territory as the lack of context in the node UI, the syntax of UDF, factional zone control, and colony task management. Several good ideas came out of the brainstorming that I'll look forward to trying tomorrow :D

By the time I got home there was only a little coding time left, so I just made a few quick tweaks here and there that I thought of in the car. One of the bigger ones is that I fixed the imposter texture generation to use a proper orthographic projection and fixed all of the scaling and bounding issues so that the imposters now align perfectly with the real models. Looks a lot better (but I still need a better technique for blending the view angles).

Anyway, it's back to work as usual tomorrow. I'm excited to see how the coding goes now that I've gotten the chance to come out of my cave for a week :monkey:

Sorry for the brief log...let's hope for some excitement tomorrow ;)
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 6, 2014

Thursday, July 10, 2014

It's actually nice to be out of the coding cave for a while, and I'm feeling that a few breaths of fresh air are going a long way towards a more productive Josh :geek:

Content: AI Expansion!

About time, isn't it? Today I started working on the expansion metaproject, wherein the AI identifies and purchases assets to increase the scale at which it can perform a given task (more mining ships, more production factories, more tech labs, etc.) The cruxt of the work is searching nearby markets for equipment that has capabilities which are aligned with the project at hand.

Sadly, without production fully wired into the economy, the AI is not going to be able to find any equipment for expansion :lol: Perhaps I'll place a few cheat colonies that pump out equipment so I can test AI expansion tomorrow. It's kind of crazy how everything within the economy relies on everything else :shock:

Polish: Contextual Stack for Nodal UI

Several people have pointed out that the node UI's lack of context is underwhelming. I both agree and disagree at the same time - there's a lot of information that's still missing from critical UI elements, which makes the problem seem worse than it is. At the same time, the fact that the UI zooms to focus exclusively on the active node means that there is indeed less context available than in a traditional UI.

Yesterday in the car I was thinking that it might be nice to increase the feeling of context in the UI by including a 'stack' of active nodes - when you activate a UI node, instead of simply zooming in to focus on the node, the UI could pop a new 'window' onto the UI in front of the old node, which would also fade out slightly. In this way, you would have a 'stack' of active nodes rather than just utilizing a changing zoom. I think the stack would provide a feeling of context, as you would always be able to faintly see the parent nodes from which you've come.

Today I've started adding this functionality to the UI! I haven't finished yet so I'm not yet sure if the idea is going to work out or not, but I'm eager to see if this makes everything feel a bit more comfortable :)

More Imposter Tech

I'm still working on my imposter / LOD tech, and today I tried pretty aggressively to finish it off. Sadly, none of my mathemagic (including a number of various blending tricks, stippling, etc.) could make the angular blending look good enough. I've read a paper about fast, raytraced imposters that actually looks pretty amazing. Sadly, the writing is so dense that I still can't grasp the meat of the technique. Perhaps once I understand it I can give it a shot...I'm pretty sure that would be the ultimate solution :geek:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 6, 2014

Friday, July 11, 2014

Didn't get as much time to work today as I would have liked - I admittedly spent a bit of time with family and friends since it's my first time coming home in a while. Nonetheless, there was still time to do some code damage :)

Forgive me, but I'm going to mostly skip on the headers today since I don't feel anything was particularly coherent (other than the usual imposters work :roll: ). Let's pull out the old list instead!
  • Worked more on the stack-based UI - almost ready to roll it out!
  • Implemented some cheat colonies and have some basic equipment production happening
  • Fixed hierarchical opportunity caching - now colonies and their contents / markets / missions are actually considered by the AI :)
  • Improved dogfighting AI approach patterns
...Almost-Working Imposters!

Yet again I spent a few hours on them today, and with great success! I revisited the classic three-billboard approach, but this time used a little magic to cull pieces of the billboards that aren't really appropriate to render (specifically, those that are almost at an oblique angle to the camera). The result is a whole lot cleaner than the previous result! It actually looks...really good! Combine that with adding in proper surface normal transformation so that the lighting is now globally correct, and you've got something that looks really darn convincing. Like, even at fairly close range! Ships and asteroids both look great using this technique. I haven't tried stations yet, but those will probably always be rendered with real geometry anyway.

The only real remaining problem is some z-fighting at long range. Thanks to the massive scales in LT, even with logarithmic depth tricks I still encounter z-fighting artifacts since the tri-axial billboards are literally touching one another. That may take some effort to resolve - but I'm sure I'll think of something. At this point we're very, very close to achieving awesome new amounts of LOD geometry for cheap cheap cheap :D


Hoping for a bigger day tomorrow.. :geek:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 6, 2014

Saturday, July 12, 2014

Have you missed those beastly May dev logs? Me too :) Hope you'll indulge me in a bit of theory today. Yes, I did some implementation work, but I'm getting tired of talking about that :lol:

Warp Lanes and Infrastructure Metaprojects

I spent a lot of time thinking about the warp lane architecture today, as it's something that I desperately want to see in this month's update.

First, a bit of abstract theory (it's been a while, hasn't it?) :) Maybe it's not such a practical idea, but it occurred to me today that construction of warp lanes can be thought of not just as a mechanism for expediting travel. Warp lane infrastructure is actually a mechanism for manipulating the distance metric of space itself. I spoke a bit about this briefly in an update last year in which I explained why I think point-to-point jumping is so incredibly boring compared to the 'trade lane' paradigm of the Freelancer universe. My statement was basically that trade lanes induce a really interesting distance metric on space - one in which the topological distance between two points is not simply their euclidean distance, but rather, a path length using the trade lanes. So much more interesting! So it makes sense to think of warp lanes as a tool for manipulating the very fabric of space. With point-to-point jumps, distance is distance. But with warp lanes (yes, I don't want to completely rip off Freelancer terminology :lol:), distance is an interesting and malleable concept.

Consider that I have two points of interest. They are distant in euclidean terms - but it's important to me that I can travel quickly between them. How do I reduce their distance? With warp lanes. Yes, it's stating the obvious, but in a way that allows the AI to understand the significance of warp lane construction. Bringing two points in space together is accomplished by building a warp lane.

So where does warp lane construction fall into the metaproject framework, and how exactly does it work? Actually, I think it's most suitable for us to introduce a new type of metaproject: infrastructure. We already have AI metaprojects for increasing the scale of a project via more assets (expansion), increasing the scale via higher-tech assets (research), decreasing competition (monopolization), and increasing security (security). But what about decreasing the logistic overhead of a project, in particular, the time it takes for a single round of the project to complete? This is a new concept! We could call it infrastructure. Creating new warp lanes would fall under this category, as it would decrease the time it takes to reap the same reward from a given project, thereby increasing the yield per unit time. There could, conceivably, be other such types of actions that reduce the logistic overhead of a project, but I'm not sure what they are yet :geek:

We'll talk about warp lane construction later ;)

Analytic Economic Equilibrium

Yeah, so while we're in the abstract clouds right now, might as well go a little further. I'm haunted by the idea that there exists an equilibrium for any given configuration of economic nodes in an LT system. Everything that I've done recently seems in line with this idea. As I've reiterated many times, action in the LT universe is intentionally structured to be continuous. Where continuous, periodic action exists, does not a periodic equilibrium exist?

I keep wondering if it's possible to compute the equilibrium of a system somehow. Computing the equilibrium for any given set of economic nodes + configuration of AI projects in the system could go a long way for LOD simulation. Consider the equilibrium of a system to be some periodic function, and then compute the 'net change' of the system over one period of that function. If we could do that, we could then simulate massive amounts of time with almost no work - simply applying the same net change as many times as we like to simulate as many periodic cycles of the equilibrium as we want. Every once in a while, we could re-compute the equilibrium (allowing AI to change projects, execute metaprojects, etc.) and continue on.

Bah. I'm sure I'm in the clouds now, but it's nice to dream, right? Crazy ideas have already worked out quite well in LT.


Coming back down to concreteness tomorrow :) Thanks for your patience... :roll:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 6, 2014

Summary of the Week of July 6, 2014
  • Implemented wormhole zones (finally able to travel to new systems again!)
  • Implemented holographic model rendering for the node UI
  • Lots of work on imposter tech, culminating in first successful test run (and massive performance gains)!
  • Started work on the expansion metaproject AI
  • Layer-based node UI theory
  • Warp lane / infrastructure metaproject theory
“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