DICE’s summer party

Following a well stablished tradition, DICE celebrated the arrival of summer organizing a great party. They rented a great place the House under the bridge. Built under a tall highway bridge over the lakes with nice and informal environment.

This party remind me to the ones arranged by EA Madrid’s team. Colleagues formed bands and performed for everyone. Was good fun, including arts and crafts. Had a really nice time.

Meeting old friends

It’s a busy summer visit-wise. We reunited with old colleagues and went everywhere around town. We covered the mandatory visits and then some uncommon corners here and there.

And, on top of everything we had the chance of hangout with this german hunk. Lovely dude.

Something I never thought I’d do was to visit Skansen during Midsommar. I particularly enjoy Swedish traditional songs. And yes, we danced like little green frogs.

Improving life a little

The last months we put a lot of effort into improving our apartment. We renovated the place and started buying new and hopefully better appliances. Let me introduce you to our new vacuum cleaner!

s a vacuum cleaner.

A lovely bag-less machine that’s able to deal with cat hair and looks a little bit like an Autobot. While we were looking for models to buy we decided to check youtube for suggestions. We discovered that there’s a ring of Scandinavian youtubers that compare models and do all sort of field tests on these machines. It was fascinating. Never thought anyone could get so excited about cleaning carpets.

And one last thing. We went to a live recording of No Such Thing as a Fish.

A comedy podcast around trivia and curious facts. The podcast is funny and I recommend it quite often.

Cooking, expanded

During our time in Poland I discovered Vindaloo and truly liked how violent that dish could be. But when reading about it in more detail I discovered that it’s not supposed to be poison. It’s supposed to be vinegary. So I tried my hand at cooking it:

Some lessons learnt: careful with the veggies or you’ll end with a soup. A tasty one but that’s not how the dish is supposed to go. Also, sweet tamarind is not the same as cooking tamarind, it was my first time trying this, it’ll get better next time.

Some weeks ago we were lucky enough to get invited to a nice Spanish get together. Since we’re that fancy we brought some cinnamon buns and some traditional pickled herring.

The recipe couldn’t be simpler, even if you start from raw fish. I discovered later that not everyone loves pickled herring, it’s almost like almost no one does. If you look with attention you’ll see the cinnamon rolls just before baking.

Also I decided to buy a crockpot to my parents. Quite a normal one, but it seems that it’s a hit these days. Makes their days simpler.

And one last thing! A big grocery store opened very close to our place. It seems their plan is to specialize in imported foods and they have a Polish section. We were missing the Polish goodis so much.

If I have a recipe pending, that I want to master, that’s Bigos. A Polish dietary nuclear bomb. In other words: it’s phenomenal. Don’t get intimidated with the different meats you need for it, just follow Cheff John’s advice:

That happens to be one of the best YT cooking channels I know about.


My intention is to write a more technical entry … thoon.

Comment and share

I had a handful of pretty busy months. For starters we’ve returned to Sweden. Back in the mother land. Here you can see us mingling with the locals in the faithful Corner. In any case nothing will ever eclipse the glory of the Sports Bar back in Warsaw.

Our timing was perfect and I rejoined DICE during the final dev months of Battlefield V It’s a gorgeus game. I’m truly looking forward to try with some peers back at home.

Swedish things

Due an strange planetary alignment we had a number of super traditional Swedish events. I went to my first crab fish event. Including silly hats and duck face.

And a couple weeks later, we attended a wedding. The venue was at the shore of a beautiful lake and we had a terrific time.

Everybody had a blast and we danced to a couple ABBA songs too many. The Swedes have it in them.

New adventures in cooking

During our time in Warsaw I grew fond of YT’s cooking shows. And thanks to Mr. Sexy-Lips Adamo I discovered “the hot ones.” A pretty entertaining show that woke up my interest in spicy foods and sauces.

While I was walking around the Old Town I found a little British food store that has an extremely promissing collection of mean-spirited sauces:

… needless to say we’ve stocked quite heavily.

One of the biggest cooking discoveries (for me) that I did lately is that you can bake an omelette, so I’ve been experimenting with this approach a little bit. For instance here you have a pic of the super-meaty minced meat + bacon approach:

The lady has a collection of swedish cooking books dating to the mid 70s. One of the books is made of solid gold: Recipes from Swedish old days

where I found out a lacquered goose recipe that I truly want to try. I might give it a go if the lovely dudes from CDP decide to pay a visit to the far North.

Comment and share

Some months after release, the rythim has settled a bit. Metacritic (and OpenCritic) are stable 88 and 87 and the team has shuffled enough now. Other projects are in the horizon, but, hey, between you and I … _ I kind of miss the production period._

This crash is something well known, the disk is on the shelves, and even nowadays, in the era of the Day-0-7-14-21 patch days, it’s a relief. We relax, we crash, and we start playing all that inmense TODO game library we had waiting for us in our backlogs.

I’ve been playing Deadly Tower of Monsters and I’m having a terrific time. Silly. Goofy, and undeniably fun. Actually it’s surprisingly difficult once you go beyond the third episode. Can recommend.

Have a good one!

Comment and share

There is something about games that have a significant online part. And is the fact that those games are rarely finished. The devs might have moved onto something different but is common that a small part of the team remains for keeping the build alive. Even if a game seems to be supported only by the community, the case of BF2 might be of interest. The code team keeps an eye on the health of the build.

In BF1 we’re pretty close to release date now. The crazy period of certification by first parties is in full swing and the team is being planned for the life cycle of the game. There is a small glimpse on the future plans for BF1. Part of the team will join other projects. Others will leave for infinitely delayed holidays and some of my colleagues opt for leaving the company. Finishing a game could be a bitter sweet moment.

At some point in around a month we’ll read and watch the first reviews, which is always an exciting (and a little bit embarrasing moment) Until that time, the Open Beta, some funny infographics here, was a nice and enlightening time. It’s interesting how sometimes we need external confirmation to follow our own intuitions about the game.

We’ve used everything as a feedback source, forums, youtubes, you name it. And you’ll be surprised on how closely we’re following the Battlefield reddits.

I joined the production side of BF1 working with the AI team as a tool programmer. Polishing to the best of my abilities the workflows we had in place. Then I transitioned to work with the cinematics team. We might be up to something great, we’ll see.

We’re done. And I’m happy about it.

PS: If you like the pew pew pew, buy the game, it’s worth it ^_^

Comment and share

Sweden has been a musical powerhouse for the last 30 years. Here Eurovision is a rite and Melodiefestivalen reings supreme. Lately Scandinavia has produced some extremely famous dance floor smash hits. It’s practically impossible that you haven’t listened to Avicci

Take your time, and let’s explore this theme together, after some mellow instrumental section we have these verses …

One more time
Let’s do it again
Blow my mind
Do it again

That’s it! Blow my mind. The shot is properly configured, everything is in place. You have a new set of materials, lighting has been massaging the globals, the process is working. It’s the first result with all the content in it. You’re the king of the world, the animation is shinning, all the microgestures are there, … however

And then it arrives, the moment before
The anticipation, you know it’s like Mmm-mmm-mmm
Wait for it, wait for the build up
And then let’s do it again

… what if we tweak the camera just a little bit?, let’s change that DOF, I wonder if art direction will be satisfied with that particular prop that is catching a litle bit too much attention in the frame, dang, yes, let’s process the shot one more time.

We do what we want, and as soon as it’s done
We just do it again
Let’s do it all, and when we come down
We just do it again

Plot twist! Our referenced layers have been modified without warning! Oh golly, there is a tree in the middle of this shot, but what the hell? Let’s contact layout, we need to contain the damage before the whole daily review is plagued with rogue trees. Fix the layer, queue it again.

I don’t wanna stop, I know I should
But let’s do it again

Crisis solved, the daily is saved. But, in this version you just notice that the AO might be a little bit too intense. What to do? Should you invest more CPU time getting a new version with a tweak or should you move forward to the next shot? … what the hell, let’s send it one more time.

And churn, and repeat. At some point you’ll realize that the problem is not making the production machine start and keeping it in motion. The real problem is to stop the monster. I haven’t worked in extremely large productions (yet) but I can imagine the struggle of stopping an horde of artists to keep iterating for ever.

Don’t care what they say, it hurts so good
It hurts so good

Yes, yes it does. And it’s amazing.

Comment and share

Last week I wrote a bit about the production of BF1 Cinematics. I went a bit over the impact that the deployment of Shotgun had on us.

But I didn’t went into any technicalities, let’s remedy that. One of the possibilities we have with a SG installation is to hook our pipeline to it. We could, for instance, upload the nightly videos to it. Or connect JIRA to its tasks. Or perhaps we could improve our creation tools with some SG insight, who hasn’t written a custom Maya open file dialog?

Let’s use Python on this one. First, you’re going to need the Shotgun API it’s a relatively straightforward installation. And, once done, you’re ready to go.

In it’s simplest form, using the SG API follows the classic pattern:

  1. Stablish a connection with the site.
  2. Do your operations.
  3. Close the connection.

Boilerplate

Let’s get the boilerplate out of the way right away:

from shotgun_api3 import Shotgun
sg = Shotgun("https://cAndc.shotgunstudio.com",
             "code_and_chlorine",
             "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")

sg.close()

In this case we’re going to use an API key to authenticate the script. In the script sections of your site you’ll find where to create such key. The process is simple and how to create an API key is explained here.

Interesting Shotgun stuff: Queries

At the end, as a pipeline programer, you tend to be very interested in harvesting information about your current production. So querying the DB is the cornerstone of any code you write. This block tends to be useful:

project = sg.find_one("Project", [["name", "is", "CODE_AND_CHLORINE"]])
filters = [['project', 'is', {'type': 'Project', 'id': project['id']}]]
fields = ['id', 'code']
shots = sg.find("Shot", filters, fields)
# now you have all the shots that live in the CODE_AND_CHLORINE project

This tiny code snippet has two interesting points, first the use of find_one

And pay attention to the fields variable, since that’s the SELECT part of your Query[1]. The vanilla SG API will return you a combination of list and dictionary objects. From this point you’re free to hammer your rendering machines as hard as you can possibly manage.

More interesting queries

Of course, queries can be more complex than the previous example, what about looking for a shot code in a known project?

# One known shot in one known project
project = sg.find_one("Project", [["name", "is", "CODE_AND_CHLORINE"]])
filters = [
                ['code', 'is', 'Shot_001'],
                ['project', 'is', {'type': 'Project', 'id': project['id']}]
          ]
fields = ['id', 'code', 'Project']
the_shot_you_are_interested_in = sg.find_one("Shot", filters, fields)

Or perhaps finding a human user in it?

# Finding a user in the DB
filters = [['login', 'is', 'jcbellido']]
user = sg.find_one('HumanUser', filters)

If you have worked with Microsoft Entities or with the ultra-popular Hibernate you’re probably familiar with the ORM complexities. SG has a page about queries and filtering.

Getting medieval: Uploading versions

Ok, so at this point you know what lives in your production, it’s names, cut times, durations, … you name it. But how to upload a new version of a shot? Let’s extract the core of that sample:

project = sg.find_one("Project", [["name", "is", "CODE_AND_CHLORINE"]])
filters = [['login', 'is', 'jcbellido']]
user = sg.find_one('HumanUser', filters)
path_to_video = r'D:\tempFolder\Shot_001.mp4'
data = {'project': {'type': 'Project', 'id': project['id']},
        'code': str(the_shot_you_are_interested_in['code'] + '_01'),
        'description': 'automated upload of a new version',
        'sg_status_list': 'rev',
        'entity': {'type': 'Shot', 'id': the_shot_you_are_interested_in['id']},
        'user': {'type': 'HumanUser', 'id': user['id']}}
result = sg.create('Version', data)

sg.upload("Version", result['id'], path_to_video)

Just the surface

This is, of course, just the basic stuff that you can do with the vanilla API. SGs code libraries are packed with super interesting code examples.

PS: Name convention and handlers have been simplified for clarity.
PS2: Yep, I understand than the API key is not the preferred way of perm handling, but let’s agree: it’s super convenient.

  1. Forgive me for SQL reference.

Comment and share

As I guess it’s obvious I’m currently working at DICE, the Swedish game developer. We’re close to the release of Battlefield 1 and everyone at the office is excited and hyper active. These are good but tiring times.

Some months ago the company released the reveal trailer of the game:

and there you can see a lot of shots we’ve been working on during the last months. Yep, that’s correct, some of those assets takes months to be finished and presentable. The game will ship with a mix of real time cutscenes and prerendered ones.

We’re using Frostbite to do the render. Quite a complex software that is constantly evolving as the developers add new features, improve the render, speed up the loading times, … etc. And all that, while the artists keep working on their assets. Sometimes I wonder how the whole shebang doesn’t simply collapse so kudos to our production team.

This is not the first time I work with animation and CGI. When I joined the Cinematics group at Battlefield 1 I just assumed (wrongly) that applying the same production strategies might work well. The first thing that shocked me was how difficult is to keep a name convention in an environment as open as DICE. It took us a month to propagate the news to everyone involved. And that was just the begining:

Centralize the info

On a very small production you can control the progress with anything. Post-its? Sure. Excel? Sure. A whiteboard? Sure. It doesn’t really matter since everyone can spend a minuscule part of his time on keeping up to date with the production. But what do you do when there are several teams? What if those teams are working on a different continent? Well, after checking a little bit we realized that deploying Shotgun could help us organize the work better. And it did, but here comes the catch:

  • By adding Shotgun to the mix we were adding yet another task manager to the ones already in place at the office. No one likes to update 3 different systems just to report the managers that something is ready to go. And here, we’re talking about artists that have better ways of use their time than checking boxes on different applications.
  • No management system works without managers. This means that someone has to keep an eye on the platform itself, organize the production, assign the pipeline to the tasks, etc. It was then when I discovered how complex could be to hire new people (or reassign them) in a big company. If you’re going to do this, make sure that everybody understands that simply installing a software does not change a thing. And someone has to spend time in it every day.
  • Stick to it. Once in production and unless the situation is desperate, stick to it. You might realize that the software falls short in some areas. But remember that changing systems in the middle of a production is always a risky move (and will end in even more manual work)

Keeping the names consistent between companies is challenging

A cinematic at DICE is a combination of mocap and traditional animation. DICE has a small mocap studio in it, but it’s not prepared to do big shots, as the ones we have in the game. All this should be outsourced to companies that are especialized in this kind of work. At this point Shotgun was in place and configured, so some of the work was already there. But sadly some of the captures were pre-shotgun and we inherited the name convention by the Mocap studio. They used a pretty much by default numbering system, we use something a more ellaborate, with human handlers, sequence numbering, takes, … and this ends in this sort of conversations:

Director: I would like to review Scene 009.
Artist: On which episode?
Director: The one with the tank.
Artist: We have 2 episodes with tanks.
Director: …
Artist: smile
Developer: slams face against table

That’s completely unnecesary and even risky at the end of the production when everybody is tired.

Who turn my fire blue? Referencing run-time assets

One of the big differences with the movie bussiness is that you have to keep the movie as close as possible to the the looks of the game. The movies are in service of the game. And that means that you’ve to reference some of the content of the runtime. Usually this is fine, and everything works. Except that it doesn’t.

From time to time the developers add breaking changes, or big differences in the behavior of the code. Sometimes the art director will change the whole look of a level. Sometimes your previously nice and cozy fire will turn blue and you’ll not have a clue of why. Did someone changed the general render parameters? Is it a problem with the camera? Is the shader broken? When a part of the team is working in a different environment this changes could be difficult to track.
And keep in mind that the non-cinematics team was working using another set of tracking tools. Be ready for some heavy duty research.

And this brings a warm memory of a shot that kept changing time of the day during a couple of weeks, believe me, it’s no fun to light a shot when the sky is changing constantly.

Automation is king, but only if your QA is relentless

The moment I saw the schedule it was clear that doing this production by hand was out of the question. We needed as much automated processes as we could manage to deploy. At the end of the production we have built a “reasonable” infrastructure of rendering machines. It was able to streamline the whole production, end to end. From animation back into the game. Let me insist on this: there was an automated process that added the movies to the runtime. With this approach the teams working with the gameplay can verify that the tone is correct and the flow is working as intended. Again, remember that we were doing a game and the movies are in service of the gameplay.

But if you’ve read my previous points you know that things can go wrong. What if the characters are broken and the camera is just pointing at an empty space? And just to make that worse, the movies have reached the runtime and everybody is just staring blankly at the screen.

At this point I’m not sure this kind of issues can be handled automatically. You need a human there, and this person has to know the whole pipeline to be able to pinpoint where the problems are happening. In a way you’re as good as your QA is. So, as a pipeline developer, spend time with your QA, they’ll be happier and everybody will benefit from this. Speak with them, make their life as easy as you can manage.

Oh, and btw:

there you have a little bit of extra footage.

besitos

jcb

Comment and share

jc_bellido

My name is Carlos Bellido and I work coding games in Stockholm. I rediscovered swimming and gymns after moving to Sweden. Keep in mind that Kalles Kaviar is an an acquired taste.


I work in the audio department in FatShark