Updated Our Journal (41): On Singing Bards, Indigo Voice, and Dynamic Floors
TL;DR: The Bard’s Tale IV Kickstarter in two weeks; From the Depths: Indigo released; Nathan Fabian on conjuring dynamic floors; other news
Thomas here. We had another one of our work-trips to inXile recently, with Colin McComb, Adam Heine, and me visiting, joined by inXile line producer/Wasteland 2 designer Eric Schwarz and with an appearance by newly minted writer Mark Yohalem. As always it was a productive visit, reviewing our progress, having meetings on a variety of subjects and in general making sure everyone is in sync on everything, plus the less productive but no less invaluable board game evenings. You can view glimpses of our meetings via Brian Fargo’s Vine, with the Torment brain trust in action, Colin’s dramatic reading, and Colin and George voice work. Now that we’re all back we will have a lot to talk about, but first a bit of news for all Exiles, not just Tormented Ones.
We’re very excited about our upcoming Kickstarter for The Bard’s Tale IV, which we recently announced will kick off on June 2nd! Follow our countdown on our official The Bard’s Tale IV site or sign up to get notified when we launch. We have also provided an early viewing of the Kickstarter tiers we plan to make available, you can join the discussion on our official forums.
If you’ve been with us along this wild crowdfunding ride, you may recall we funded Torment: Tides of Numenera while Wasteland 2 was still in production. This is grounded in our business philosophy going back to Brian’s days at Interplay. Running production cycles one at a time, only starting one as you close another, leads to redundancy in different departments at different times. For a small company like ours, but even for larger companies, this hiring-firing cycle can be par for the course even though it is undesirable and harmful to people and companies. But just as crowdfunding helped us make the kind of games publishers were not interested in, your support also helped us avoid this cycle. By having a small pre-production team focused on the next game while the current one is in full production, everyone is kept productively busy.
The majority of inXile’s staff is working on Torment: Tides of Numenera, and this will continue to be the case until it launches. No one is transitioning off of Torment until their work on the game is complete. A few people have been working on the Wasteland 2 Game of the Year Edition improvements, and as that moves through finalization and testing we’ll have those team members shift over to Bard’s Tale IV. As with Torment, Bard's Tale IV will have a pre-production period where a small focused team can work on the game’s story, concepts, systems, and look, getting us ready to jump into full production as soon as the time comes. But rest assured, until Torment is in your hands, it will continue to be inXile’s main focus.
Meanwhile, our work on Torment: Tides of Numenera has been progressing very well, including updating the game to use Unity 5. We’ll have more on the game’s production soon.
As a small but significant aside, our pledges counter on our official website now has us over 90,000 pledges! It’s exciting to see your support still carrying on so strongly, and we’re curious to see what the future brings.
From the Depths: Indigo Released
We have now released the second of our From the Depths novella series. (Recall that the From the Depths novellas, written by people involved in the creation of TTON, together illustrate the five Tides. While not required reading to play, they do provide a richer understanding of the world and setting of our game, and also helped our design team explore and master the nature of the Tides.)
If the Digital Novella Compilation was part of your Tier, or if you pledged for the $15 add-on, then you can retrieve the Indigo novella RIGHT NOW at our site. It's available DRM-free in all the most common eBook formats (epub, mobi, azw3, and PDF).
We released the Gold novella late last year. This second one comes from Torment editor and Planescape veteran Ray Vallese, who has been working with some of you on your NPCs and item descriptions. It tells the story of Tuck, who settled into New Iqa in the vicinity of the Oasis of M’ra Jolios. When catastrophe hits the isolated settlement, Tuck knows he must act to save the scattered survivors with the help of his friend Baji. Baji has always given him good advice. Even if he’s just a voice in Tuck’s head.
The priest walked toward Palene, but not too close. “Honored M’sem, we don’t expect your people to share your food without recompense. We can trade. Look around. I have no small skill with the numenera—what you probably call the relics of the ancients. Let us negotiate an arrangement to help both our villages. The creatures that attacked us might come for you next. Or perhaps the mutants of M’ra Jolios will go on the march. An alliance—”
“Oh, yes, the creatures,” Palene interrupted, sounding bored. “I understand that your little camp here was nuisanced by a chelka swarm. What a shocking turn of events. You really should be more careful about what turns up on your doorstep. It is an awful thing to feel unsafe in your own homes. No one would fault you for going back where you came from.”
I’d never heard the term chelka swarm before. The look on Eltria’s face said that she hadn’t, either.
The priest hammered onward. “As I was saying, an alliance between the humans will strengthen the valley and help us all. We may be scattered, but we can work together. What I’m proposing—”
“Is nothing of interest, I am quite sure.” Palene’s words came faster now. He moved around a table and picked up a rusted metal cube from a raised stand. The cube had been cut nearly in half, exposing dozens of filaments that he flicked back and forth, chuckling as they sparked.
“We can make a deal,” I said. “There must be something Warale wants.”
His light brown eyes smiled at me over the blue smears on his cheeks. “Why, yes: your absence. The fact that we all are human does not entitle you to squat in our lands. The valley was ours before you arrived. It will be ours after you are dead. And then we will sweep up your bones and take what we please.”
“We are not as weak as you seem to think,” Eltria said.
“Oh, have I offended you?” Palene put on an exaggerated frown. “What a poor guest I make. But it is so tiresome to negotiate with children.” He walked to the window, tapped on the stronglass with a corner of the cube, and peered out toward the village. “We know of this place. It lies closest to M’ra Jolios. Can you see the dome from here? I wager you can. More likely, then, that the mutants will slake their thirst on you, and rid the valley of pests. We must do what is best for us all. You understand, I’m sure.”
“I would say what is best for all is a matter of perspective.”
I stepped in close to Palene and looked up into his eyes, puffing myself up as much as I could. “We offer friendship, and you threaten us? This is a grave insult. I demand an apology.”
Palene laughed. “Or what? You’ll thrash this body?”
I clenched my fists at my sides. We both knew my threat was empty.
“I quite like being tall,” he said, comparing our heights. “If only my family could see me now. Were it possible, I would stay longer. But the yoke has melted, so my time is about up. We spared your ridiculous runner so that I could deliver our response in person. You seem incapable of taking the hints we give, so I will speak plainly: there will be no further discussion. The next runner you send to Warale will be put to better use. And you, tinkerer”—he threw the cube to Eltria—”do not demean your prowess. You do have small skill with the numenera.”
Palene smiled coldly, but the expression faded as his eyes rolled back and his body crumpled like a marionette. I lunged to catch his head before it struck the floor, and laid him out. He’d come back to us in about an hour, gods willing.
On Moving Floors
Nathan Fabian here. At my day job I make pretty pictures out of billions of finite elements for one of the Department of Energy labs. At night I dabble in game development, including some consulting through my company, Longshot Studios. I was a backer of Torment and have been working with the team part time for almost a year. Currently, I'm working mostly on our animation system, but I wanted to talk a bit about a recent Torment challenge I worked on. It gets a bit technical, but the final result is pretty cool.
Imagine you are handed a pylon. It is a very ordinary sort of pylon. In fact it’s only a computer model—a few tens of polygons, quite unremarkable for a pylon. But your mission isn’t just to hold this, it is to take it forth and multiply! 100 by 100 pylons to create a dynamic floor where each individual piece can move up and down independently, changing the shape of the floor on the fly. This single pylon must become a mega structure of 10,000.
“No problem,” you say, “I have the power. I have code!” You execute a loop, create 10,000 pillars, and your graphics card (GPU) catches on fire (not literally). This was not the incantation we were looking for.
Modern graphics cards are extraordinarily powerful and can render hundreds of millions of triangles per second. For someone who grew up reading Michael Abrash books and articles, it feels indistinguishable from magic. Back then, we were happy to get resolutions of 320x240 because “Look! Square pixels!”
Where did our incantation go wrong? Why was the devil box not appeased?
Draw calls are a phrase used to describe whenever the CPU asks the GPU to do anything. For both chips, talking on the motherboard’s bus is like shouting across a noisy room; it takes a bit of back and forth to get the message across and it slows things down. The less frequently we do that the better. What we asked for originally was 10,000 draw calls. That’s about 9,999 too many when what we want to render is just one structure. So we need to find a better method to leverage.
Fortunately, there’s a method known as “Instancing,” which solves the problem. Unfortunately, we can’t use it out of the box and still run systems that only support Shader Model 3 (older Windows, OSX and Linux). Fortunately, Unity – our engine – has a batching system, both static and dynamic, which is useful for this purpose. It takes small polygon objects and constructs them into one larger many-polygon object that represents the whole. Unfortunately, it doesn’t work very well in this particular case.
More importantly, it’d be bad code to rely on it. Just as writing teachers instruct, “Write what you know,” a programmer should write what she knows into the code and only use algorithms to figure out what she doesn’t know at runtime. In this case, we know what we want: it’s a floor with 100 by 100 pylons. By grouping these pylons up, they will require far fewer draw calls. Since Unity limits meshes to 64000 vertices, rather than grouping the entire cluster into a single mesh, we’ll separate them into half a dozen smaller sections.
Now we are set… almost.
Our floor doesn’t currently move up and down. We could redo this batching process every time one of the pylons moves, but this will be slow if we want to animate the pylons every frame.
Quick check in with VFX: “Do we want to anim—“ “Yes.” “Okay then.”
It turns out that without stepping outside of Shader Model 3, we are able to use a shader to shift vertices around. We just need a little help from a texture. The pixel color values within the red channel will define our height (in a range from 0 to 255, where 0 is the lowest position, black, and 255 is the highest position, bright red), which represents any distribution range of height with a discretization of 256 steps. In the vertex program of the shader it looks like this:
float4 lkup = float4((v.texcoord1.xy + _DisplacementOffset.xy) * _DisplacementScale.xy, 0.0f, 0.0f);
float4 dispV = tex2Dlod (_DisplacementTex, lkup);
float dis = (dispV.x + dispV.y/256 + dispV.z/65536) * _VerticalScale + _VerticalOffset;
By using additional color channels beyond just the red channel and pre-multiplying the displacement on the CPU (and then dividing by that factor on the GPU as shown here), we can achieve additional precision beyond the 256 discretization levels, up to 256^3 in this case by using the red, green and blue channels. Technically we can get 256^4 values by using the alpha channel, but we likely don’t need that many; we can reserve that last channel for additional information, if needed in the future.
In order to animate the floor, we just need to change out the texture or individually manipulate the pixel color values of the texture. While this is an additional draw call, it is only one more, which is not nearly as bad as the 10,000 we started with.
Now we are set… almost.
We need to fit this shader’s lighting into the rest of the awesome lighting pipeline. While not complicated, it does require duplication of the lighting code into this new shader, so that the pylons can be properly positioned in the vertex portion before the lighting calculations take place.
With all this in place we get a dynamically moving floor, rendered at interactive rates, that looks like this:
No Thank You, Evil! and Bloodstained
Our partners and friends at Monte Cook Games have returned to Kickstarter for their latest title: No Thank You, Evil! This pen and paper game is based on the Cypher System that both Numenera and The Strange use, but adapted for the whole family and with a setting and focus on imagination and make-believe.
Another exciting Kickstarter is Bloodstained: Ritual of the Night. This Kickstarter looks to bring about the return of the Igavania genre of exploration-style platformers best remembered for Castlevania: Symphony of the Night. Judging by the response, people have been starving to return to the genre!
In Other News
In the last update we mentioned Colin McComb’s talk at EGX Rezzed, which can be viewed in full on Youtube. But if you prefer to read rather than listen (a not unusual trait for a Torment fan), Colin posted the full transcript on his own website.
While in London Colin also sat down for an interview on his first Planescape project at Interplay, from before he moved on to join Chris Avellone for Planescape: Torment, and had an afternoon session of Numenera with some folks from Eurogamer.
And finally, Adam Heine and Kevin Saunders have been answering more questions on our forums. Check our tumblr for comments on voice acting, making a quality game, character visibility, and the Tides.