@Tristan: I studied computergrafics for 5 years. I'm making 3D art now since about half a year fulltime, but I had some experience before that. Its hard to focus on one thing, it took me half a year to understand most of the vegetation creation pipelines. For speeding up your workflow maybe spend a bit time with the megascans library. Making 3D vegetation starts from going outside for photoscanns to profiling your assets. Start with one thing and master this. @Maxime: The difference between my technique and Z-passing on distant objects is quiet the same. (- the higher vertex count) I would start using this at about 10-15m+. In this inner radius you are using (mostly high) cascaded shadows, the less the shader complexety in this areas, the less the shader instructions. When I started this project, the polycount was a bit to high. Now I found the best balance between a "lowpoly" mesh and the less possible overdraw. The conclusion of this technique is easily using a slightly higher vertex count on the mesh for reducing the quad overdraw and shader complexity. In matters visual quality a "high poly" plant will allways look better than a blade of grass on a plane.
Is this not like gear VR or anything else
The amazing team of artists from Wargaming discussed all the updates to GI, particle systems, materials, water shaders and other elements of the astonishing World of Tanks engine.
Wargaming has recently released 12 HD maps for World Of Tanks PC on a Sandbox server. Those players who managed to take a glimpse into it were truly amazed by the new improved graphics. The community reviews went viral shortly and though the server is off now, the dates of new playtests will be announced soon.
Everything the players saw was a result of hard work and collaboration of all art and tech departments. Today we’ll go backstage and talk about new lighting and shading, terrain, particles, post-processing and all the other stunning work they did to push the game to a new level.
Hi! We are here to dive you into new features and pipelines we developed and implemented for World Of Tanks PC.
First, we would like to remind you how WoT looks like now.
Here is a technical demo that shows how the game looks with all new features.
A short introduction to our interviewees:
Artem Krizhanovsky (R&D Art Team Lead)
I worked on several titles like S.T.A.L.K.E.R 2 (canceled), World Of Warplanes, Survarium, World Of Tanks. Now I lead R&D technical art department to bring next-gen graphics into World Of Tanks. I’m responsible for lighting and shading, texturing pipelines etc.
Daniil Kopytsko (R&D Art Team)
Hi. I joined the R&D team 1,5 years ago at the best moment possible – main development and production stage. While working on graphic improvements for WoT I had a huge scope of responsibilities: modeling, sculpting, baking, texturing, level art/set dressing, environment setup, some particle VFX, lighting setup (depending on the environment) and developing new pipelines and techniques.
Karyna Trychyk (R&D Art Team)
Hi, I’ve worked in game development since 2008. I started in an outsourcing company, where I took part in a number of projects like Gothic IV or IL-2: Sturmovik. Now it’s been a bit less than 3 years since I’ve joined the Wargaming team. I started as an environment artist and then moved to the R&D department to develop new features, which is a great fun and pleasure.
Fedor Kletskov (R&D Art Team)
Hi there. I’ve been working for about 4 years in Wargaming now. I started as a Level Artist, but when we started some research on new graphics I joined the Tech Art team and then moved to the new R&D Art Team as my permanent workplace. Here I’m responsible for the vegetation related stuff, as well as level-art and set dressing on later stages.
Graphical Update Overview
Artem: We have pretty advanced, yet simple shading. While we deal with the vast amount of materials and lighting conditions, only one base material handles 99% of the cases. For example a tank and a tree have the same material type, only input parameters like Base color, Roughness, Subsurface transmittance are varied.
To achieve that we augmented our main BRDF with a number of improvements, allowing it to be suitable for any realistic case.
Retro-reflectivity for super rough materials:
Stochastic Flakes, when the roughness is so high that microfacets of the material became visible (snow, dust, sand):
We also added some shading features as dynamic dirt, dynamic wetness, advanced material blending (read below), vertex animation, etc.
Lighting system was also significantly improved.
Usage of captured photometric real world lighting conditions let us significantly improve in quality all HDR –related effects such as Bloom, DoF, Lens Flare, and in the same time simplify the workflow for the artists . It works from the box, just like in the real world you don’t need dozens of sliders to setup the lighting.
Capturing HDR sky
We also use spherical harmonics grid for Global Illumination. Our system reads height deviations on terrain and objects to optimize probes placement. What you get is a non-uniform grid of probes (e.g. less probes on planar fields/more probes in cities or villages).
Daniil: Our new water system is a great example of collaboration and understanding between artists and render engineers. It has all the features that artist might need. It looks great, yet simple and efficient in terms of setup. We use it for every water instance in the game like sea, ocean or river. All particle-based water effects are artist-driven as well as flow and foam maps. But I think its greatest feature is interaction with a tank. Here is a small breakdown of how it works:
We use deformation particles (we’ll talk about them later) to change water plane’s height.
Adaptive tessellation builds up a new displaced geometry (only where it’s needed, cuz… it’s adaptive) to create waves from tank hull and tracks
Then we spawn foam particles and textures to create all the splashes, surface bubbles and drops
The last thing to achieve even more realistic look is underwater particle system (e.g. bubbles and dirt)
We also use water reflection probes as well as SSR to create water reflections.
There is still place for improvement in that system, but water already looks and behaves real.
Daniil: It’s a cool technique for interaction with the environment. The tech behind it is really simple: if the deformation particle collides with an object it displaces/moves the object’s vertices in the shape of the particle. Kinda like that 🙂 We use it to bend grass and bushes under the tank, to create water deformations, grass shockwaves from tank muzzle blast etc.
Are there any changes in standard particles as well?
Daniil: Yep, they went physically based too. They are affected by direct and indirect light as well as their own emissive abilities, they can cast shadows and receive them. Here is a small breakdown of particle lighting:
What about large-scale objects like big stones and buildings?
Daniil: Buildings now use a unique texture set for parts like windows, doors, signs, etc., and a tile-blend material for walls and roofs.
First, you pick all the textures you need for different materials and they are automatically baked into atlas. Then you just pick the brush, select the material, and paint on the mesh. You can do it inside our editor or in Substance Painter with our custom shader. Material blend masks are written and stored in a small texture. Height map is used to create nice looking and realistic transitions between materials. That technique helps us to get almost infinite amount of variations using the same mesh.
And what about the cinematic look of the game? What techniques do you use?
Daniil: Thanks to our graphics team we now have some powerful post-processing components in the game. We moved computations into HDR space, preserving energy conservation and substantially improved temporal stability. We have a great looking DOF effect, bloom, god rays, lens flares, LUT color grading etc. Here are some screenshots.
Karyna: Terrain was my main focus during the development. We used a whole new approach that allowed us to produce highly detailed landscapes and expand them beyond the playing zone.
First, we decided to make separate texture sets for close and medium range, and one global texture for far range. This is not something unusual, but our main task was to make the terrain look consistent at all ranges and seamlessly blend all our texture sets. To meet this requirement we needed to remove or minimize repetitive pattern that comes from detail tiles and the same time preserve macro/global texture features at close range.
The solution was a new blending mode. I assumed one tile should be in a similar color range at close, medium and far ranges and came up with this formula:
This approach with average color has some limitations, it could produce bad results with tiles which have high contrast in color. It was our big concern, but finally it worked out well with the variety of tiles and a slider to control global/macro influence at close range.
Speaking of the variety, a big step forward and a great achievement of our render programmers was the new ability to blend up to 8 tiles in one terrain chunk. And given the fact, that we have set of detail textures, set of macro textures, global and wetness map, it means 18 materials in one pixel.
Global wetness map:
Besides, the blend between tiles wasn’t a simple weight blend, but was also modified with height map, which allowed us to make a big amount of combinations and considerably improved the final look.
Such a complicated shading couldn’t be achieved without a virtual texture where we baked all the tiles blended together. Plus it allowed us to have almost unlimited number of decals which are also baked in virtual texture.
Another nice feature is blending of objects and terrain, which allowed seamless transition between modeled rocks and ground textures.
On top of that we implemented tessellation, and all these things together gave us the amount of details and the look we aimed to.
By the way, the suspension and tracks are affected by tessellated terrain.
Does outland use the same tech as the playing zone?
Karyna: No, outland is another system that was developed after we finished the main terrain. It smoothly blends with the inner zone, but uses unique optimized resources and covers up to 32*32 km. Outland has 2 cascades with different resolution and each one is textured with 8 tiles.
Besides, outland can be populated with vegetation and mesh objects. We have a library of rocks scanned from nature with the help of drones and optimized lately. To texture such huge objects we use a set of tiles and dirt texture, plus rocks have unique normal map baked from hipoly geometry. Sometimes we also mix it with unique albedo.
How do you work on materials? What techniques do you use, is there photogrammetry, traditional sculpting or procedural approach?
Karyna: There’s a little bit of everything, but the most loved method is photogrammetry. It is an important part of our pipeline, we have a dedicated team and these guys just grab their equipment and go to any location we might need, and then provide the production team with high-quality assets.
We also use Zbrush, Substance Painter and Substance Designer as a part of our workflow. We have custom shaders for Painter that recreate our lighting model and approach with tiled materials. So it’s very efficient because we can paint our custom masks and textures using the power of substance tools. And we’re constantly adding to our in-house library of materials.
Can you tell a few words about decals?
Karyna: We have several types of decals, most of them are usual decals with or without heightmap. Decals are baked into virtual texture and have two options: their heightmap either replaces terrain’s height or adds to it.
Also there is wetness type, which works the same as global wetness, but just gives more details due to a better resolution.
Separately stand inverse decals – they appear with distance and vanish at close range. We use them to replace arrays of small objects like lavender field.
Road tool is also a part of our decal system, it distributes decals between control points and has proved to be a colossal timesaver.
Fedor: Vegetation is very important for gameplay in World Of Tanks – it hides tanks, but it was probably the weakest spot in both tech and art aspects for years. So we’ve started research on how to implement physically correct vegetation in World of Tanks.
We started by creating a solution to capture correct albedo. We use x-rite colorchecker and in-house GPU-tool to quickly calibrate the photo. The most challenging thing we’ve dealt with was capturing transmission because we have to remove light from both direct and indirect sources. So, after some experiments, we found out that the most useful tool for it was a glossy tablet screen and circular polarizer ofc. With some manipulations, we’ve got a transmission texture, that works pretty well for our purposes.
After that we model highpoly branch and render it in Vray to receive physically correct textures. Final assembly is in Speedtree, but since Speedtree 6 doesn’t support PBR, we use some tricks to achieve it in the final render.
As you may see in the following screenshots transmission adds huge amount of realism to the final image.
Our trees polycount is around 3.5-4k triangles for lod0, so we had to lod them aggressively. And as far as speedtree 6 doesn’t work with PBR we had to create custom imposter system. After some experiments we managed to implement
ingame baker, so now every imposter has the same components as a tree – Albedo, Normal, Transmission, Gloss and Metallic.
We made imposters convex to add some depth to them. So the transition between mesh and billboards is barely noticeable.
We also implemented a tree tint system, that uses custom texture to get a color we need and baked AO of a tree to create a smooth gradient transition between original color and sampled color from texture. This technique is also applied to billboards.
For the grass we also use Speedtree 6, so the workflow of asset creation is pretty similar to the trees. We use small clusters of grass that we assign to terrain texture. After that we paint grass scale map on terrain to add some height variation add we use tint from color texture to add some color variations. And we also use screenspace shadows to add depth to the grass population and stick it with the terrain underneath.
I guess that’s all we can share with you for now. Stay tuned and wait for more!
All those new techniques, art pipelines and engine improvements were developed and implemented by our R&D Team of artists and render engineer. Credits and thumbs up to those guys:
- Head of Client Core Department – Vladimir Suslionkov
- R&D Art Team:
- Team Lead – Artem Krizhanovsky
- Daniil Kopytsko
- Leonid Lubenko
- Karyna Trychyk
- Fedor Kletskov
- Egor Fatseev
- Graphics Team:
- Team Lead – Bronislav Sviglo
- Denis Ishmukhametov
- Dmitriy Bespalov
- Irakliy Arkhangelskiy
- Nikolay Partas
- Pavel Berestovoy
- Anatolii Kuzub
- Alexandr Kharlamov
- Pavel Turchin
- Linear production teams:
- Art Director – Vitaliy Lashkov
- Art Supervisors – Valeriy Nefedov, Vera Osedovskaya, Michail Ritvinsky
- 3D Art Team Lead – Alexey Yankovich
- Level Art Team Lead – Natalia Sidorevich