Next up in our 'Report In!' series, a discussion with a couple of Bohemia Interactive's Senior Programmers, some exclusive 'behind the scenes' images, and a technology showcase have been declassified and are ready for immediate analysis!
We're often asked to let some of our people talk about what it's like to develop a game at BI. 'Report In!' gives you a more personal perspective on our team, a more detailed look at the way we go about our work, and fresh information about our ongoing projects.
Caught up in the down-wash today are Frantisek Novak and Jan Kadlec, who talk about some interesting new technology featured in Take On Helicopters (TKOH), and discus what it's like under the 'Real Virtuality' engine's hood.
Tell the people a little about yourself. What's your role? How long have you been with Bohemia Interactive? Which projects have you contributed on and what is your favourite BI game or mission?
Frantisek (Frenkee): I started working at BI in mid-2008 as a programmer, at this time BI worked on Arma 2 and my first "big" task was handling post effects. Since then, I've worked on several projects, including: Arma 2: Operation Arrowhead (A2OA), Arma 2: Private Military Company (A2PMC) and now on TKOH.
Jan (Řrřola): I've been a coder at BI since Autumn 2009. I've worked on Arma 2 (A2), A2OA, TKOH and various side projects. I'm usually given long-term research tasks (such as procedural asset generation or refactorization of the game core); for TKOH, I'm implementing 'ambient traffic' and smooth interpolation between simulation states. My favourite BI game is the original Operation Flashpoint.
And can you give us a random fact about yourself?
Frenkee: I like climbing and mountain biking, these activities take up almost all my free time.
Řrřola: I'm a brony and I like it.
Render to Texture
For those of us not 'in-the-know', can you give us a simple explanation of 'Render to Texture'?
Frenkee: The scene is captured into a texture and then this texture is used in the scene. For example, to create a mirror, we move a 'camera' into the mirror position, capture the scene as viewed from this POV into a texture and, in the next pass, use that texture on the mirror model.
That sounds logical enough, but what kind of problems are associated with implementing this feature?
Frenkee: It's very expensive, where a naive implementation can take 50% of the FPS. Now, this feature takes less than 25% and it doesn't depend on the number of targets. Some more "minor" optimizations are still being worked on.
The Virtual Battlespace (VBS) solution (the professional incarnation of the game, used by numerous militaries around the world) is based on Arma 1, where the rendering pipeline is different. We can use the VBS solution for complexity estimation and as a basis to understand the problems connected with this technology. However, for this project, we ultimately needed to create our own solution.
And what sort of new or unique gameplay opportunities does this new feature bring about?
Frenkee: Aside from mirrors, and using them for landing, etc, you might think about the more complex effect we can create. In A2OA, we implemented Forward-looking Infrared (FLIR). Basically, this is where we visualise the dynamic heat signatures of any object in the game. So, with an on-board monitor, and the ability to hook up a controllable camera, you can think about things like tracking down for a criminal on the run, coordinating with ground teams, etc.
What is 'ambient traffic', and why do you think it's important for Take On?
Řrřola: Ambient traffic consists of thousands of cars moving along a vast road network. Seattle is supposed to be a huge, populated urban environment, Ambient traffic goes a little way towards bringing the city to life.
How performance demanding is this technology? Does it 'scale' across different hardware?
Řrřola: It is quite cheap when compared to all the other stuff the game must do. Gamers will be also be able to tweak the distance up to which cars are visible.
And what about ambient air traffic? Is this technology related to its inclusion?
Řrřola: Not at all. Ambient road traffic is a part of the game engine, which enables far greater optimisations than, for example, the script-based ambient air and marine traffic.
What kind of factors does this simulation take into account?
Frenkee: The load generates force (gravity & movement), which is applied to the helicopter as an external factor, which, in turn, affects the flight model. Wind impacts upon the helicopter itself, but is not considered in the sling-load simulation. We evaluate collisions only for the load, rather than for the rope itself; however, this feature may be added in the future.
And again, what sort of new or unique gameplay does this new feature bring about?
Frenkee: Rope simulation is used in a number of ways; the three 'stand out' gameplay mechanics are: sling-loading, winching, and fast-roping. You can probably imagine the kind of gameplay possibilities, with potentially any content being attachable to our ropes. Also, we're in the process of hooking up thing like the new fast-rope animations to the simulation. The way this technology is implemented closer to the user end is fairly abstract, too, which makes it simpler for our modding community to take on our basic features and improve or tweak them as they see fit.
Does the rope simulation have any effect upon the flight model? For example, if I'm carrying a heavy sling-load, can I 'feel' that in the way the helicopter handles?
Frenkee: We evaluate the external forces applied to a helicopter, so, yes, this force affects the flight model. How much is flight model is actually affected depends upon the helicopter type and load weight, so a particular load will effect two different helicopters in two different ways.
Programming at BI
So, what's it like working with the Real Virtuality engine? Are there any particular advantages or constraints?
Frenkee: If you mean something like 'how difficult is it add a new feature into the engine', the answer is easy: it's always difficult! The addition of new feature into the engine is in almost all cases a challenge, where the difficulty depends on the cohesion of one feature with other parts of engine.
Řrřola: The engine is huge, but it has aged quite well. On the other hand, it's easy to lose your way because there are many hotfixes to trip up on and there's little time for re-factoring. We curse at the engine regularly.
How does Take On Helicopters differ to the previous projects of which you've been a part?
Frenkee: Take On is, from my point of view, a different game, when compared with OA or A2. OA was "just" an A2 extension, that is, the underlying gameplay was same - the goal was to add new features and improve/fix existing features. For this project, we must make big changes on the engine side: integrating the new helicopter flight model and simulated weather, supporting big maps and picture in picture, etc. As for the similarities: it's still small programming team with only a short time assigned to development! :o)
Řrřola: There is more data in TKOH than in any previous BI game. In A2OA the designers tried to work inside the constraints of the engine; in TKOH they overrun them and tell the coders to make it work. :)
What are your views on programming for the PC platform generally? Would you consider console programming to be advantageous?
Frenkee: The generally known issues with 'consoles vs PC' are discussed in many threads on the web. I've never written code for consoles, but, from my point of view, coding for the console is just learning to use another SDK and somehow accepting the specific limitations for any given console.
Řrřola: Not really. PCs are ridiculously faster than consoles, easier to make stuff on and there's much more freedom on what your game can become.
And after a long day of programming, what do you like do to relax and unwind?
Frenkee: Long day of programming :o) ... sleeping is a great relaxation, while programming my own stuff is not bad either, but, if I need to clear my mind, the best remedy is riding my (mountain) bike or some other sporting activity.
Řrřola: Swimming, martial arts, ballroom dancing, spending time with my girlfriend, watching cartoons and anime, size coding.
What first attracted you to programming, particularly in the games industry?
Frenkee: It started at the university, we have some lectures about computer graphics and we had to create a simple game - similar to Wolfstein in 3D. And that's how it all began ...
Řrřola: I got a ZX Spectrum when I was four and started coding in BASIC at five. When I transcribed a Nibbles game from a mag and the computer started doing what I told it to, I was hooked.
What advice would you offer to any aspiring young code-monkeys out there?
Řrřola: Read a lot of code, code a lot of what you read. Learn maths and build up intuition.
The nation's politicians have taken leave of their senses, enshrining into law a total ban on the sale of all video games. For which game would you risk breakin' the law, breakin' the law?
Frenkee: This is difficult to say, because I don't play games as much - an 8 hour per year is my limit! :o). But, I am curious about Battlefield 3.
Řrřola: The Witness.