Ini bisa dilakukan dengan masking. Ada banyak cara untuk melakukannya.
Salah satu caranya adalah dengan memiliki cara untuk membuat versi bayangan elemen foreground. Gambarlah latar belakang. Kemudian gambarkan elemen latar depan, kurangi sedikit tergantung pada bagaimana Anda ingin pencahayaan bergerak, sedemikian rupa sehingga Anda hanya menghasilkan warna hitam. Kemudian gambar latar depan secara normal.
Cara lain adalah dengan membuat foreground menjadi buffer, sedikit lebih banyak dari yang sebenarnya Anda lihat. Kemudian lakukan beberapa pass "to black" dan mungkin pass blur. Sekarang render output dari set pass ini dan kemudian bagian yang terlihat dari buffer foreground.
Untuk mendukung beberapa lampu pada sudut yang berbeda, Anda bisa melakukan langkah sebelumnya beberapa kali, atau menumpuknya semua dalam satu buffer. Matematika akan bervariasi berdasarkan pada apa yang Anda coba capai, tetapi tebakan pertama pada apa yang terjadi dalam video pertama adalah bahwa mereka hanya mengambil posisi cahaya terhadap posisi kamera (tengah area yang terlihat) dan lalu gunakan vektor itu (diskalakan) untuk menentukan cara mengimbangi bayangan. Sesuatu seperti:
draw background
for each light intersecting viewing bounds:
offset = light.position - camera.position
offset *= SCALE FACTOR (0.25 maybe)
draw shadow foreground at offset
draw foreground
Lampu yang "lebih dekat" ke tempat kejadian akan memiliki faktor skala yang lebih kecil. Jika Anda ingin banyak kedalaman, ada beberapa matematika untuk bekerja di sana, hal-hal geometris sederhana.