Graphics Reference
In-Depth Information
1.3 Power of Mobile GPU
Despite recent tremendous developments and rapid performance improvements,
mobile GPUs are still at least one league behind their desktop siblings. Although
programmable flexibility of mobile GPUs is quickly gaining (OpenGL ES3.0 com-
patible GPUs have all the features of the last generation consoles and sometimes
more), computational power (ALU) and memory bandwidth are lagging behind.
Let's look at important aspects of skin rendering and discuss how viable those
approaches are on mobile GPUs.
1.3.1 Skin Subsurface Scattering
Although the blurring of the screen-space buffer requires an additional rendering
pass, in practice the whole subsurface scattering step takes only around 5-10%
of the GPU workload in our demo, and it scales very well with the numbers of
skin shaded geometry. The performance-versus-quality trade-off can easily be
managed by reducing the resolution of the screen-space buffer.
1.3.2 Physically Based Shading
Even the simplest energy-conserving Blinn-Phong specular lobe is still too ex-
pensive for a real-time application on mobile GPU today. It requires too many
ALU operations per-pixel. If we want to achieve a physically plausible shading
beyond Blinn-Phong, then we have to rely heavily on pre-computing the BRDF
using 2D textures.
Final shading of skin pixels takes around 50% of GPU workload for close-up
scenes in our demo. It proved crucial to optimize this part of the algorithm.
1.3.3 Per-pixel Environment Reflections
To evaluate environment reflections a per-pixel normal sampled from normal map
has to be transformed from tangent to world space. That requires three additional
dot products per-pixel.
We opt to sacrifice quality and sample environment reflections using per-vertex
normal instead. Because we employ extremely dense geometry for the characters,
visual difference was minimal in our case.
1.3.4 Linear Lighting
Although sRGB (gamma corrected) texture reads are trivial operations for the
desktop GPU, in the case of OpenGL ES2.0 such reads are only available via
platform-specific extensions. Even in the case of OpenGL ES3.0 where gamma
correction is part of the core API, texture reads might incur different costs de-
pending on the GPU family. The same situation applies when writing out linear
values into the final sRGB framebuffer—an extension is required in the case of
Search WWH ::




Custom Search