ROBLOX is all about iteration.
Whenever we work on any features – including all rendering features – we usually have a vision for the future, like how ROBLOX games will look on different platforms in a few years – and then we take bite-sized pieces of this vision and execute it. Shadows are no exception.
Since time immemorial, ROBLOX supported character shadows via a technique known as stencil shadows. This resulted in nice hard-edged shadows that followed the character geometry perfectly. However, the technique had several issues – it was not very fast, it was not very robust – on some character meshes you could see strange inverted shadows – and, most importantly, it was hard to integrate it with our lighting solution.