GDC 2021 MatthewTJohns ND
GDC 2021 MatthewTJohns ND
GDC 2021 MatthewTJohns ND
● It’s all about vehicles, but mostly texturing and shading these vehicles
● I speak from my humble artist’s point of view
● Concept art, current methods, new methods?
● This is just one of many approaches and not the ONLY approach to the
problems we faced
Concept art describes the challenges ahead
‘Posed’ or articulated
doors and hood
Openable trunk/doors
Vehicles shown with heavy
snow coverings
- Vast numbers
- Different types
- Varying levels of distance
Outline of the major challenges
● Plastic wear
Layer stack
● Base layer
● Plastic wear
● Rust
Layer stack
● Base layer
● Plastic wear
● Rust
● Plastic wear
● Rust
● Peeling paint
Layer stack
● Base layer
● Plastic wear
● Rust
● Peeling paint
● Rust bleed
Layer stack
Base layer
●
Layer 6: Overall dirt
● Plastic wear
● Rust
● Peeling paint
● Rust bleed
● Overall dirt
Modular textures
● Modular textures,
that the shader can
use for many inputs
● These three textures
do a lot of work
Modular textures
● BRDF textures stripped and
replaced with simple colors –
given variation via generic
threshold textures
● These textures have multiple
uses across all layers
Wear mask + threshold
Generic threshold map is also
used with the wear mask to add
detail to the blend
Advanced shader features
● Border blend feature adds Border blend feature
detail to the blend
● Leveraging shader features
creates detail without the
need for additional textures
and these effects are easier
to optimize
Another example layer - rust
● Rust works in a similar way
● All layers use this modular texture
approach, sharing and re-using
where possible
Levels adjustments
● Levels adjustment within shader
allows me to fine tune the values
the generic threshold texture
presents to achieve many different
looks
Tiling layer details
● Having layered details that can
be tiled independently, means
larger vehicles no longer need
more textures to look high
resolution
Final example layer
● Rust bleed layer is a good
example of all three blend
methods
BRDF values
● Basic BRDF values (no textures)
for the rust bleed effect
Blend against previous layers
● No longer draws on rust, but still
needs more instructions
Wear mask
● The wear mask has the rust bleed
drawing in exactly the same
position as the basic rust by
default
Histogram select
● Using histogram select I can ‘push’
the rust bleed effect out so that it
surrounds the rust with a soft
effect
Threshold
● The wear mask has the rust bleed
drawing in exactly the same
position as the basic rust by
default
Final appearance
● With my final adjustments the
subtle rust bleed layer is
complete. It’s cheap and adds a
nice element of detail
Texture memory comparison
● Let’s see how the new
pipeline affects texture
memory
Single vehicle
● Around 33 MB for one
vehicle on the new pipeline
● Because we have more
details and more textures
overall our memory for
one vehicle has increased.
● Loading an additional
Uncharted 4 van cost 9MB
Two vehicles
● Loading an additional
TLOU: II van costs just
259 KB
Entire levels?
● Dramatic reduction
in texture memory
when adding
multiple vehicles to
a level
Alternative looks
● All vehicles had
multiple shader
looks
● Requests for new
vehicle types were
submitted to myself
and Tyler and we
created all variations
needed
The submerged look
Borrowed textures
● Making use of already loaded
textures to build new shader
looks
● This was the case for all of the
vehicle looks
Instanced materials
Optimizing the layers
● Added two texture samples (algae)
so two are removed (subtle
roughness)
● Reducing texture samples in the
shader to make it optimized at
render time
● Replacing textures, with flat values
One shader per element
● Each vehicle uses multiple shaders
and each shader, has multiple
looks
Implementing the blend
● Simple BRDF, much more
interesting blend
● Height value drives shader blend
● Old system required height value
input per shader
Instance based blends
● World space position and rotation
per instance now drives blend
● Allowed us to solve problems like
the river rapids sections efficiently
Cool tools
● World space position and
rotation values requiring
manual entry at first was
tricky
● Tool implemented by
Dongsub Woo, Steven Tang
and Ke Xu
Optimization
● Finally, optimization!
● Layered shaders introduce
more texture samples
● Previously mentioned
optimizations reduced cost
● Distance based blends
made shader much
cheaper over distance
● red = expensive, green =
cheap
Optimization