Slides from the Game Industry Conference 2015.
* Second movie link is the same as first after conversion, here is the correct one https://youtu.be/SkEJ7ox2c8w
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
Shadow Warrior 2 and the evolution of the Roadhog Engine, GIC15
1. „Shadow Warrior 2 and the evolution
of the Roadhog Engine”
Jarosław Pleskot
Senior Engine Programmer
Flying Wild Hog
2015
2. Presentation overview
1. Introduction
2. The engine evolution
a) Level construction pipeline
b) Character destruction
3. Foliage system 2.0
a) Architecture
b) Storage
c) Rendering
3. Shadow Warrior vs Shadow Warrior
* both games run on PS4 and XONE, SW was ported to Mac and Linux externally
Shadow Warrior Shadow Warrior 2
Production time 18 months total > 2 years
Team size 35 50
Engine programmers 2 7
PC Platform differences* PC DX9 32 bit, ported to
DX11 32/64 bit
PC DX11, 64 bit only
Multiplayer - COOP
Renderer Light Pre-Pass, nonlinear Deffered, linear, PBR
5. Steps of the evolution
Hard Reset
(DX9, 32 bit)
Shadow Warrior
(DX9, 32 bit)
Shadow Warrior
(32/64 bit
DX11/PS4/XONE)
Shadow Warrior 2
(64 bit DX11, PS4,
XONE)
• First version of
Roadhog Engine
• Light pre-pass
renderer
• Main + render
threads + a few
worker threads
(Havok, sound,
etc)
• Foliage system
• Mirror
• Cutscenes
• Animation system
extended
• SSAO
• Skinned decals
• Job system
introduced
• Renderer ported
• New platforms
• Extensive use of
job system
• Physically based
rendering
• Multiplayer
• Procedural
character
destruction
• Big change in
level pipeline
2011 2013 2014 2016
6. For all FWH games before Shadow Warrior 2 level
geometry was constructed mainly outside game
editor.
• Hard reset: one big mesh + smaller meshes
• Shadow Warrior: a few parts of a level (loaded
or not) + smaller meshes + foliage
• Game editor was simple, focused on gameplay
design
Level construction pipeline
7. Level construction pipeline
• Shadow Warrior 2 has randomized maps
• Four levels of randomization:
• large scale randomization: level blocks
connected together with special parts
(connectors) + background blocks
• small scale randomization : ability to
change/hide/show parts of a block
• random interiors
• random weather
8. Level construction pipeline
• Now level construction is done in the game
editor
• A lot of new features added including:
• Terrain system(meshes creation+painting)
• Geometry brush (simple meshes)
• Wire modifier (static meshes deformation)
• Scaling support
9. Character destruction
Hard Reset:
• ragdoll breaking
• swapping chunks
• spawning character parts
as static meshes
• swapping textures
„Hard Reset – Case Study”, Tomasz Baran, 2012
11. Character destruction
Shadow Warrior:
• ragdoll breaking with
skinned mesh cloning
• character is made of parts
(standard, gore, skeleton)
• spawning character parts
as static meshes
• skinned decals
13. Character destruction
Shadow Warrior 2:
• real-time procedural character splitting
(mesh+ragdoll)
• holes
• spawning parts as static meshes
• material modifiers
• skinned decals
YOUTUBE: Shadow Warrior 2 - 15 Glorious Minutes of Gameplay [E3 2015]
14. Character destruction
Shadow Warrior 2:
+ unique cuts
+ less work for artists
- more memory,
splitting time
- some constraints for
artists
Still under development
look for future presentations for details
16. Foliage system before SW2
• Levels in Shadow Warrior created in 3dsmax
• Spawn meshes technique invented *
Spawn meshes –
meshes with
relative foliage
density stored as
vertex color
* „The Techonology behind Shadow Warrior”, Jarosław Pleskot, 2014
17. Foliage system 2.0 – requirements
• Denser foliage
• Levels created in game editor
• Random level generation (level blocks,
predefined parts of a block changed)
Must reinvent the foliage system!
Use (spatially) bigger meshes and reduce an
instance size to lower the gather time
18. Foliage system 2.0 – architecture
• Main classes:
• Foliage Area
• Foliage Layer
• Foliage Palette
• Foliage Set
• Foliage Element
19. Foliage system 2.0 – layers
• Foliage layer - contains instance transformations in
local space
• One Foliage Layer per gameobject with foliage
painted
• Objects can be moved, rotated, scaled in editor,
foliage will be updated properly
Foliage Area
Foliage Layer „A” Foliage Layer „B” Foliage Layer „N”…
20. Foliage system 2.0 – layers
• On level start we build foliage grid using foliage
layers of all created objects (random levels)
Foliage Area
Foliage Layer „A” Foliage Layer „B” Foliage Layer „N”…
World
Placeable „A”
Placeable „B”
Placeable „N”…
21. Foliage system 2.0 – layers
• A foliage layer stores full FP32 positions and
FP16 normals together with coloring values, set
ids and seeds for a random number generator
• Foliage can be blocked in some areas using
foliage blockers (eg. don’t want foliage under a
randomly placed fountain)
• 100-200 layers per level block used
• Artist can change brush parameters without
repainting the layer
22. Foliage system 2.0 – palette
• Painting using Foliage Set (Brush)
• One set can contain many elements
• Each element can specify many meshes and painting
properties for all meshes in the element
Foliage Palette
Foliage Set „A”
Foliage Element 1
Foliage Element N
…
Foliage Set „N”
Foliage Element 1
Foliage Element N
…
…
24. Foliage system 2.0 – painting
• Density counted for
every set individually
• Can erase instances of
a single set or all of
them at once
• Painting on
translucents as an
option (e.g. over/under
water)
• Angle limit (eg.
painting the stairs)
25. Foliage system 2.0 – coloring
• Constant or
background color mode
• Can randomize color
in HSL space
• Can blend out
coloring using object
space Z coord and
multiplier
26. Foliage system 2.0 – grids
• Multi resolution grids (2 levels: 4x4 and 64x64
meters, one grid per batch) in Shadow Warrior
DX11
27. Foliage system 2.0 – storage (grid)
• Now more batches used and visibility test used
for foliage (software Z buffer visibility)
• One grid per batch changed to one grid for all
batches to reduce grid total traverse time and
to evade redundant visibility tests
29. Foliage system 2.0 – storage
• Rotation stored as FP16 euler angles
• XY position relative to node corner
• Z in worldspace
• Position resolution ~1,6 cm, min/max Z = ±512 m
• Size generated at runtime
• Batch and LoD index in m_euler.W
struct SObject
{
Half4 m_euler; // 8
Int16 m_worldZ; // 10
UInt8 m_localX; // 11
UInt8 m_localY; // 12
UInt32 m_coloring; // 16
};
30. Foliage system 2.0 – imposters
Imposter system was created for static meshes
• Diffuse + normal maps
• Many angles
Adopted for the foliage system:
• Yaw only rotation
• Sharpening
• Background color
31. Foliage system 2.0 – imposters
• Enabled by default
• From 1 to 16 angles, default 4
• 3 texture sizes, default 128 (size == bigger dimension
of single image, power of 2)
• Range ratio, default 0.5 (?)
• Generation background color
• Sharpening option
32. Foliage system 2.0 – imposters
meshes 100 %
imposters, 100 %
imposters, 20 %Level of detail:
• 3 stages for high
and ultra setting,
• 2 stages for low
setting (20% of
instances)
• Dissolve between
stages
35. Foliage system 2.0 – terrain
• Foliage is usually placed on the terrain
• Editing the terrain must update the foliage
• When painting we get positions and normals
from g-buffer
• When updating
terrain they are
recaluclated
from heightmap
36. Foliage system 2.0 – backend
OFF• Traversing grid and gathering data for a
renderer using one separate job, many arrays
of vertices copied to a single dynamic VB /
passed to imposter system
• Rendering:
- main G-Buffer pass
- directional shadowmap pass
- ids for picking, editor only
37. Foliage system 2.0 – to do list
• Coloring on imposters
• Dedicated instancing vertex format
• Reaction to the passing characters ?
Movies
1. https://youtu.be/hFz5OAVFSC8
2. https://youtu.be/SkEJ7ox2c8w
38. Acknowledgment
Łukasz Zdunowski – Lead Artist
Zbigniew Siatecki – Senior Environment Artist
Marcin Sapiejewski – Senior Environment Artist
Przemysław Witkowski – 3D/Engine Programmer
Artur Maksara - Producer
+ our entire team and GIC staff.
39. Thank you for your attention
Questions?
Contact:
Email: jarek.pleskot AT flyingwildhog.com
Twitter: @JaroslawPleskot
Facebook: Jarosław Pleskot